書式設定用のテンプレートを使用したExcel 2003スプレッドシート生成用の.NETコンポーネント

StackOverflow https://stackoverflow.com/questions/1405431

質問

私のアプリケーションが解決しようとしている問題はこれです:

現在、いくつかのストアドプロシージャが実行され、データが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とやり取りしていると思われるため、遅いです。

ライセンス: CC-BY-SA帰属
所属していません StackOverflow
scroll top