首页 文章

如何在Visual Studio中通过Revit API和Windows窗体在Revit中显示Excel信息

提问于
浏览
0

我试图在Revit的Windows窗体上显示Excel电子表格,首先我在VisualStudio中编写代码,我创建了一个窗体(我输入路径和工作表编号)并通过运行它打开窗体窗体并以表格格式显示excel数据

namespace ShowDataWindowsForm {public partial class Form1:Form {public Form1(){InitializeComponent(); }

private void button1_Click(object sender, EventArgs e)
    {
        string PathConn = "Provider=Microsoft.ACE.OLEDB.12.0;Data Source=" + 
        textBoxPath.Text + ";Extended Properties=Excel 12.0;";
        OleDbConnection conn = new OleDbConnection(PathConn);

        OleDbDataAdapter myDataAdapter = new OleDbDataAdapter("SELECT * FROM 
        [" + textBoxSheet.Text + "$]", conn);
        DataTable dt = new DataTable();
        myDataAdapter.Fill(dt);

        dataGridView1.DataSource = dt;
    }
}

然后我创建了一个外部命令,为其添加了一个窗口表单并完成了相同的过程,这是外部命令的代码:

[Autodesk.Revit.Attributes.Transaction(Autodesk.Revit.Attributes.TransactionMode.ReadOnly)]

public class iShowDataWindowsForm:IExternalCommand {static AddInId appId = new AddInId(new Guid(“DB98294F-89D9-4EAE-A990-63A0694F91CC”)); public Result Execute(ExternalCommandData commandData,ref string message,ElementSet elementSet){

using (Form1 thisform = new Form1())
    {
        thisform.ShowDialog();

    }

    return Result.Succeeded;
}

我的问题是,当我打开Revit并运行插件时,它会打开一个窗体,就像在visual studio中一样,我输入路径和工作表编号,但点击show按钮后,Revit会崩溃并关闭 . 如果有人能帮助我,我感激不尽 . 这张照片显示了它在Visual Studio中是如何工作的,但是在revit中它会崩溃 . See picture

enter image description here

我只是将路径和工作表编号放在代码本身上,现在只需单击Visual Studio中的显示底部即可,但仍然会在Windows窗体的revit最终代码中崩溃:`namespace ExcelVisualStudio {public partial class Form1:Form {public Form1(){InitializeComponent(); }

private void button1_Click(object sender, EventArgs e)
    {
        string PathConn = "Provider=Microsoft.ACE.OLEDB.12.0;Data Source=" + @"C:\Users\farshidmoosavi\Desktop\Schedule3.xls" + ";Extended Properties=Excel 12.0;";
        OleDbConnection conn = new OleDbConnection(PathConn);

        OleDbDataAdapter myDataAdapter = new OleDbDataAdapter("SELECT * FROM [" + "Sheet1" + "$]", conn);
        DataTable dt = new DataTable();
        myDataAdapter.Fill(dt);

        dataGridView1.DataSource = dt;
    }
}

我调试了代码,发现这是导致程序崩溃的错误:步入:踩过非用户代码'System.Data.Common.DbDataAdapter.Fill''Revit.exe'(托管(v4) .0.30319)):已加载'C:\ windows \ Microsoft.Net \ assembly \ GAC_64 \ System.Transactions \ v4.0_4.0.0.0__b77a5c561934e089 \ System.Transactions.dll',跳过加载符号 . 模块已经过优化,调试器选项“Just My Code”已启用 . 抛出异常:System.Data.dll中的“System.AccessViolationException”程序'[168] Revit.exe:Managed(v4.0.30319)'已退出,代码为-1073741819(0xc0000005)'访问冲突' .

仍然不知道如何解决这个问题 .

1 回答

  • 0

    我刚刚解决了问题 . 起初,我尝试了它Revit 2018,其优点是它显示错误并且没有崩溃 . 通过Google搜索错误,我将office的版本更改为2013,Access引擎64b,然后将我保存为excel电子表格的文件格式更改为.xls . 然后它奏效了 .

相关问题