0

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

現在、いくつかのストアドプロシージャが実行され、データはSQL結果から空白のスプレッドシートに手動でコピーされ、レポートアナリストがデータをフォーマットします。このプロセスは長すぎて費用がかかると考えられてきました。

(私の考えでは)理想的なソリューションは、ストアドプロシージャの結果を取得し、それをワークシートテンプレートの特定のセル範囲に書き込むことができるコンポーネントを備えた.NETアプリケーションです(テンプレートのフォーマットを維持します)。その後、結果をワークブックに照合できます。 .NETアプリケーションで。

そのようなアプリケーションはありますか?さらに良いことに、誰かがより良い解決策を持っていますか?

よろしくお願いします。

4

4 に答える 4

1

SpreadsheetGear for .NETを使用すると、Excel ワークブックを開き、値を挿入して、ワークブックを保存できます。

Excel レポート作成 (つまり、Excel へのエクスポート) のサンプルはこちらから、無料試用版はこちらからダウンロードできます

免責事項: 私は SpreadsheetGear LLC を所有しています

于 2009-09-10T14:17:49.767 に答える
1

データの設定に使用するもの

の形式でデータを取得します

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);
        }

これにより、テンプレートの書式設定が保持され、セルごとに設定するよりもはるかに高速にデータが一度に設定されます。

それが役立つことを願っています

于 2009-09-10T14:04:57.527 に答える
1

相互運用機能により、常に Excel オートメーションを使用できます。必要な出力が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);


        }
于 2009-09-10T14:12:17.390 に答える
0

この質問では、似たようなものを求めました。違いは、Excel によってスプレッドシートとして解釈される XML ファイルを生成する何かが必要なことです。データを XML ファイルに送信し、その XML を SpreadsheetML に変換できれば、問題が解決する可能性があります。ただし、SpreadsheetXM にはいくつかの制限があります。Excel をインストールする必要はなく、変換は非常に高速です。また、Excel 2007 を使用している場合は、使用できる 2 番目の XML 形式であるMicrosoft Office XML形式があります。現在のコードが COM を介して Excel と対話していると思われるため、基本的には遅いです。

于 2009-09-10T14:01:29.060 に答える