2017-12-15 49 views
1

RevitからExcelにRevitPythonShellでデータを書き込もうとしています。IronpythonでExcelに書き込む

これまでのところ、私はzip形式のリスト内のすべてのデータを収集し、以下のように対応する行と列にデータを書き込むための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モデルは、Excelに書き込むのに2分かかります。だから私は辞書を使って別の方法を試みました。

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秒かかります。あなたは辞書やリストをExcelの行や列に書くことができるIronPythonの機能がいくつかありませんか?

また、3Dパーティーモジュールのインストールも検討しました。しかし、RevitPythonShellがIronPython 2.7.3を利用して以来、これは実際の選択肢ではなく、ピップインストールを動作させることはできません。

ありがとうございます。

IronPythonで最初にcsvに書き込んだ後、何らかの方法でExcelにインポートする方が速いのでしょうか?

答えて

2

これは、.NET/Excel interopの問題です。私は、this SO questionに基づいて、配列を範囲に割り当てることができるはずだと思います。

つまり、現在の範囲は1つのセルだけです。あなたは、私がここでそれを試してみた... 2D System.Arrayを作成してみてくださいと範囲に割り当てることができます:( "Microsoft.Office.Interop.Excel")を

`` ` 輸入CLR clr.AddReference

エクセル エクセル= Excel.ApplicationClass() excel.Visible =真位 ブック= excel.Workbooks.Add() ワーク= workbook.Worksheetsユーザに見えるExcelアプリケーションを作るよう

インポートMicrosoft.Office.Interop.Excel .Add()

システムインポートアレイ xlrange = worksheet.Range [ "A1:C3"]

= Array.CreateInstance(オブジェクト、3、3)行の I = 0 範囲内(3):範囲内の列の (3) :

Screenshot of the Excel Range

: [行、列] = I iは+ = 1

xlrange.Value2は `

これは、このような結果を生成し= IronPythonのやExcel上

詳しい情報はここで見つけることができます:http://www.ironpython.info/index.php?title=Interacting_with_Excel

あなたはxlwtモジュールをインストールしてみて、それを使用することができます - COM相互運用機能を回避することができます。

0

これは実際には機能しますが、データをジッパー付きリストでセルに入力する方法が混乱しています。私は弦と浮き出しのある約9の項目を含む壁のジッパー付きリストを持っています。私はそれを働かせることはできません。たとえば、私はこの方法で簡単にCSVにデータを書き込むことができます。

with open(str(csv_file_path) + '\\wanden_data.csv', 'wb') as csv_wall_file: 
     csv_writer = csv.writer(csv_wall_file, dialect='excel', delimiter=';') 
     for i in wall_zipped_list: 

      csv_writer.writerows([i]) 
関連する問題