2017-11-17 19 views
0

リストをExcelファイルに変換しようとしています。しかし、私はそれがWorkSheet.Cells[i, y] = "value"を使って動作するとは思わない。 Excelの最後の行の最後に行を追加する一般的な方法があるかどうかは疑問です。Microsoft.Office.Interop.Excelインデックスを使用せずに新しい行を追加

public void AttorneysToExcelFile(List<Scraper.StaggingAttorney> liveScraperAttorneys, string FileName) 
{ 
    Excel.Workbook WorkBook = ExcelApp.Workbooks.Add(); 
    Excel.Worksheet xlWorkSheet = (Excel.Worksheet)WorkBook.Worksheets.get_Item(1); 
    xlWorkSheet.Name = "No Category"; 
    liveScraperAttorneys = liveScraperAttorneys.OrderBy(x=>x.Department).ToList(); 


    xlWorkSheet.Cells[1, 1] = "caseNumber"; 
    xlWorkSheet.Cells[1, 2] = "Category"; 
    xlWorkSheet.Cells[1, 3] = "Names"; 
    xlWorkSheet.Cells[1, 4] = "Email"; 
    xlWorkSheet.Cells[1, 5] = "Address"; 

    for (int i=2; i<liveScraperAttorneys.Count; i++) 
    { 
     Scraper.StaggingAttorney attorney = liveScraperAttorneys[i]; 

     xlWorkSheet.Cells[i, 1] = attorney.caseNumber; 
     xlWorkSheet.Cells[i, 2] = attorney.Category; 
     xlWorkSheet.Cells[i, 3] = attorney.Names; 
     xlWorkSheet.Cells[i, 4] = attorney.Email; 
     xlWorkSheet.Cells[i, 5] = attorney.Address; 
    } 
    WorkBook.SaveAs(FileName); 
    WorkBook.Close(); 
} 

ご覧のとおり、私は私に頼っています。私はすぐにそれを行うことができればまた助けになるでしょう。また、ヘッダーを追加した方法が正しい方法であるかどうかも疑問です。

+0

これは少し話題ですが、なぜMicrosoft Excel Interopを使用していますか?これはデスクトップアプリケーション用ですか? –

+0

はい。何か良いことがありますか?私が見た他のパッケージは非常に高価です。 – LogicDev

+0

相互運用性ライブラリの使用に苦しんでいる人として、私はClosedXMLの使用を推奨します。それはオープンソースとMITのライセンスです。見てみましょう。はるかに高速です –

答えて

1

Interopオブジェクトを反復することは、残酷に遅いです。リストをobject[,]に変換し、Excel range.Valueに割り当てます。ヘッダー行を配列の最初の要素として追加し、データを残りの要素として追加します。 rangeは、配列と同じ次元のセルの範囲です。つまり、リスト内のアイテムの数は、オブジェクト内のプロパティの数で表されます。

+0

私は 'liveScraperAttorneys = liveScraperAttorneys.OrderBy(x => x.Department).ToList(); 'を使って私のリストをソートしました。そして、Departmentが変わるたびに部門を出力したいと思います。私はあなたの解決策は、セルのインデックスは常にリストのインデックスと一致すると仮定します。反復は機能しないかもしれません。私は何かのように望んでいます。 'xlWorkSheet.AddCell(新しい文字列[] {" caseNumber "、" Category "、" Names "、...})' – LogicDev

+0

あなたは私の提案を引き続き使用できます。リスト処理中に配列を作成し(シートに書き込むのではなく配列の最後に追加する)、配列をワークシートの範囲に書き込みます。 Interopを使った私の経験では、配列を使って作業することは、BY FARが最も効果的なやり方です。 – squillman

関連する問題