書式設定用のテンプレートを使用したExcel 2003スプレッドシート生成用の.NETコンポーネント
-
05-07-2019 - |
質問
私のアプリケーションが解決しようとしている問題はこれです:
現在、いくつかのストアドプロシージャが実行され、データがSQL結果から空白のスプレッドシートに手動でコピーされ、レポートアナリストがデータをフォーマットします。このプロセスは長すぎて費用がかかると考えられています。
(私の考えでは)理想的なソリューションは、ストアドプロシージャの結果を取得し、ワークシートテンプレートの特定のセル範囲に書き込むことができるコンポーネントを備えた.NETアプリケーション(テンプレートの書式設定を維持)で、 .NETアプリケーションのワークブックに結果が表示されます。
そのようなアプリケーションはありますか?さらに良いことは、誰かがより良い解決策を持っていますか?
ご検討いただきありがとうございます。
解決
データの設定に使用するもの
データを
の形式で取得しますobject[,] excelSpreadsheetData
次に設定してデータを適用します
public void SetWorksheetData(long rowCount, long columnCount, object[,] excelSpreadsheetData, int startingRow, int startingCol, Worksheet worksheet)
{
if (rowCount == 0 || columnCount == 0) return;
//set the region data.
object m_objOpt = Missing.Value;
Range cellRange = worksheet.get_Range(ExcelGeneratorUtils.ExcelColumnFromNumber(startingCol) + startingRow, m_objOpt);
cellRange = cellRange.get_Resize(rowCount, columnCount);
cellRange.set_Value(m_objOpt, excelSpreadsheetData);
}
これにより、テンプレートの書式設定が維持され、セルごとに設定するよりもはるかに高速にデータが一度に設定されます。
役立つこと
他のヒント
SpreadsheetGear for .NET を使用すると、Excelブックを開き、値をプラグインして、ブックを保存できます。
Excelレポート(つまり、Excelへのエクスポート)サンプルを見ることができますこちらそして、無料試用版をダウンロードこちら。
免責事項:SpreadsheetGear LLCを所有しています
相互運用を通じていつでもExcel Automationを使用できます。これは、必要な出力がExcelの場合に実行しました。驚くほど速いので、Excelのインスタンスを実行したままにしないで、自分でクリーンアップするように注意する必要があります。以下に簡単なサンプルを示します。
using Excel = Microsoft.Office.Interop.Excel;
Excel.ApplicationClass _Excel;
Excel.Workbook WB;
Excel.Worksheet WS;
_Excel = new Microsoft.Office.Interop.Excel.ApplicationClass();
WB = _Excel.Workbooks.Add(System.Reflection.Missing.Value);
WS = (Excel.Worksheet)WB.Worksheets[1];
WS.Name = "Test";
try
{
int row;
int col;
WS.Cells[++row, col] = "COL1";
WS.Cells[row, ++col] = "COL2";
WS.get_Range("A1", "A2").Font.Bold = true;
WS.get_Range("A1", "A2").HorizontalAlignment =Excel.XlHAlign.xlHAlignCenter;
WS.Cells[++row, col] = "Customer";
WS.Cells[++row, col] = "Expenses"
WS.get_Range("A1", "B1").Font.Bold = true;
WS.Columns.AutoFit();
WS.Rows.AutoFit();
WS.Activate();
_Excel.Visible = true;
}
catch (Exception ex)
{
WB.Close(false, Type.Missing, Type.Missing);
_Excel.Quit();
throw;
}
finally
{
GC.Collect();
GC.WaitForPendingFinalizers();
System.Runtime.InteropServices.Marshal.FinalReleaseComObject(WS);
System.Runtime.InteropServices.Marshal.FinalReleaseComObject(WB);
System.Runtime.InteropServices.Marshal.FinalReleaseComObject(_Excel);
}
この質問で同様の質問をしました。違いは、Excelでスプレッドシートとして解釈されるXMLファイルを生成するものが欲しいということです。データをXMLファイルに送信してからXMLをSpreadsheetMLに変換できれば、問題が解決する可能性があります。 ただし、SpreadsheetXMにはいくつかの制限があります。 Excelをインストールする必要はなく、変換は非常に高速です。また、Excel 2007を使用する場合、使用できる2番目のXML形式があります。 Microsoft Office XML 形式。 基本的に、現在のコードがCOMを介してExcelとやり取りしていると思われるため、遅いです。