2016-10-20 28 views
0

大量のデータをExcelシートにエクスポートしています。アクティブレポートでレポートのデータを適切にフォーマットしようとすると、パフォーマンスに関する問題が発生しています。基本的なプリントアウトを設定して、コードのどの部分が最も長い時間を費やしているかを判断しました。セルの値を設定してセルの書式設定を分割しました。ActiveReportsのフォントサイズを設定するExcelが非常に遅い

Private Sub SetSheetFormat(intRow As Integer, dDSheet As DDSheet) 
    Dim startRow As Integer = 6 
    Dim cells As Cells.DDCells = dDSheet.Cells(dDSheet.Cell(startRow, 0), dDSheet.Cell(intRow, 45)) 
    cells.FontSize = 8 
    dDSheet.Cell(intRow, 47).SetValue((Date.Now - start).ToString()) 
    cells = dDSheet.Cells(dDSheet.Cell(startRow, ReportColumns.FirmDemands), dDSheet.Cell(intRow, ReportColumns.SI_SSDollars)) 
    cells.Alignment = Style.HorzAlignments.Right 
    dDSheet.Cell(intRow, 48).SetValue((Date.Now - start).ToString()) 
    cells = dDSheet.Cells(dDSheet.Cell(startRow, ReportColumns.FirmDemands), dDSheet.Cell(intRow, ReportColumns.NetFcst)) 
    cells.FillColor = Color.FromArgb(255, 224, 192) 'light orange 
    dDSheet.Cell(intRow, 49).SetValue((Date.Now - start).ToString()) 
    cells = dDSheet.Cells(dDSheet.Cell(startRow, ReportColumns.FirmTfrsOut), dDSheet.Cell(intRow, ReportColumns.KitComptUsage)) 
    cells.FillColor = Color.FromArgb(255, 255, 192) 'light yellow 
    cells = dDSheet.Cells(dDSheet.Cell(startRow, ReportColumns.FirmProd), dDSheet.Cell(intRow, ReportColumns.PlannedTfrsIn)) 
    cells.FillColor = Color.FromArgb(&HC0FFC0) 'light green 
    cells = dDSheet.Cells(dDSheet.Cell(startRow, ReportColumns.TotalReceipts), dDSheet.Cell(intRow, ReportColumns.TotalReceipts)) 
    cells.FillColor = Color.FromArgb(&H80FF80) 'dark green 
    dDSheet.Cell(intRow, 50).SetValue((Date.Now - start).ToString()) 

スプレッドシートには約7000行あります。このメソッドに入る前にデータを書き込むのに要した時間は6秒でした。フォントサイズを8に設定すると、50秒しかかかりませんでした。これを行うより良い方法はありますか?私はそれを一度に複数のセルに適用すると、トランザクション的なことが増え、より効率的になると思ったが、そうではない。

更新日: PageReportまたはPageDocumentからこのブックを生成していないことに注意してください。我々は、ワークブックに直接必要なものを書いています。

+0

grapecityのactivereports製品を参照していますか?どのバージョンを使用していますか?私はReportColumnsを認識しませんか? –

+0

@GrapeCityチームGrapeCityのはい。 reportcolumnsは列名を列番号に追跡するために使用した列挙型です。私たちはバージョン10を使用しています。 – dko

+0

@GrapeCityTeamこれを引き起こした原因は分かりますか? – dko

答えて

0

SpreadBuilderを使用してExcelファイルにデータをエクスポートしています。 SpreadBuilderでは、データはExcelファイルのセルごとにエクスポートされます。大量のデータがあるため、データをエクスポートするのに時間がかかりました。その後、データを変更するには、再び各セルを走査してから50秒かかるようにセルをフォーマットする必要があります。基本的には、データの量が非常に多く、Excelエクスポートのためにセル単位でSpreadBuilderが動作するため、この問題が発生します。

より良い方法は、報告書の生成中、またはエクスポートしてからエクスポートする前に、Export filters/Rendering Extensionsを使用してレポートのフィールドに変更を加えることができます。これは、このシナリオでExcelエクスポートを最適化する唯一の方法です。

+0

私たちはもともと各セルにデータを書き込んでいたので、変更を加えていました。それと同じくらい時間がかかりました。私はPageReport vs SpreadBuilderにデータを書き込むことができますが、最初にコードを書いたときに必要だったSpreadBuilderに固有のことがいくつかあります。また、ワークブックをファイルに保存する前に、これもすべてメモリ内で実行されます。 – dko

+0

はい、PageReportにデータを書き込んで確認し、レポートの作成中に変更を加えて要件を達成しようとすることができます。あなたが何らかの問題に直面した場合、あなたの意見を共有することができます。 SpreadBuilderに関して、私はそれがセルごとに動作し、あなたのケースではデータが巨大であるので、時間がかかることをお知らせしたいと思います。これは意図された動作です。 –

+0

PageReportを見ると、基本的にレポートエンジンの書き換えがすべて必要になるようです。私が紛失しているドキュメントがない限り、コードでレポートを生成して設計するだけではありません。これは、すべてのデータバインディングであり、実行前にレポートジェネレータを使用しています。現時点では、いくつかのオープンソースソリューションを追求するつもりだと思います。 – dko

関連する問題