我正在尝试使用RevitPythonShell将数据从Revit写入Excel。
到目前为止,我已经收集了压缩列表中的所有数据,并创建了一个枚举for循环,将数据写入相应的行和列,如下所示:
for index, data in enumerate(wall_zipped_list):
for count, parameters in enumerate(data):
wall_cell = worksheet_wanden.Range[(str(column_list[count]))+str(index+5)]
wall_cell.Value2 = data[count]这是令人难以置信的慢,因为循环每次都调用Value2。包含大约800面墙的Revit模型需要2分钟才能写入Excel。因此,我尝试了一种使用字典的不同方法。
for k , v in data_dict.iteritems():
#print k, v[0]
worksheet_wanden.Range["A"+str(count)].Value2 = k
worksheet_wanden.Range["B"+str(count)].Value2 = v[0]
worksheet_wanden.Range["C"+str(count)].Value2 = v[1]
worksheet_wanden.Range["D"+str(count)].Value2 = v[2]
worksheet_wanden.Range["E"+str(count)].Value2 = v[3]
worksheet_wanden.Range["F"+str(count)].Value2 = v[4]
worksheet_wanden.Range["G"+str(count)].Value2 = v[5]
worksheet_wanden.Range["H"+str(count)].Value2 = v[6]
worksheet_wanden.Range["I"+str(count)].Value2 = v[7]
worksheet_wanden.Range["J"+str(count)].Value2 = v[8]
worksheet_wanden.Range["K"+str(count)].Value2 = v[9]
count += 1这种方法已经快得多了。在Excel中,用10列填充大约800行大约需要20秒。我是否遗漏了一些IronPython功能,您可以将字典或列表写入到Excel行或列中?
我还考虑了安装3d派对模块。但这并不是一个真正的选择,因为RevitPythonShell使用的是IronPython 2.7.3,而且我无法让pip install正常工作。
提前谢谢。
是不是先在IronPython中写入csv,然后以某种方式将其导入到excel中会更快?
发布于 2017-12-18 18:03:02
这更像是一个关于.NET/Excel互操作的问题。我认为,基于this SO question,您应该能够将一个数组分配给一个范围。
也就是说,您当前的范围只有一个单元格。您可以尝试创建一个2d System.Array并将其分配给范围...我在这里尝试过:
将工作表导入为Excel excel = Excel.ApplicationClass() excel.Visible = True #使Excel应用程序对用户可见Microsoft.Office.Interop.Excel = excel.Workbooks.Add() worksheet = workbook.Worksheets.Add()
从系统导入数组xlrange = worksheet.Range"A1:c3“
对于范围( 3)中的行,a=Array.CreateInstance(对象,3,3)i=0:对于范围(3)中的列: arow,column =i i += 1
xlrange.Value2 =a `
这会产生如下结果:

有关IronPython和Excel的更多信息可以在这里找到:http://www.ironpython.info/index.php?title=Interacting_with_Excel
您可以尝试安装xlwt模块并使用它--避免COM互操作。
发布于 2017-12-21 17:37:48
它起作用了
i = 0
xlrange_revit_type = worksheet_data.Range["C2:C" + str(len(revit_type_list)+1)]
a = Array.CreateInstance(object,len(revit_type_list), 3)
while i < len(revit_type_list):
a[i,0] = revit_type_list[i]
i += 1
xlrange_revit_type.Value2 = a有没有可能为RevitPythonShell安装一个像xlwt这样的3d party模块?我找不到任何文件。
发布于 2019-04-25 04:19:32
如果你指的是你可以在VB中使用的单元符号,我不知道为什么它不能工作,但你可以创建一个定义:
def Cells(a,b):
return str(chr(a+96) + str(b))现在你可以调用类似这样的东西:
x1range = ws.Range(Cells(1,1),Cells(5,10))它的工作原理是一样的。这就是我要做的。
https://stackoverflow.com/questions/47828892
复制相似问题