1

SpreadsheetGear を使用して、DataTable から Excel ファイルにデータをエクスポートしようとしています。Excel ファイルのワークシートは、列ヘッダーと特定の書式設定を含むテンプレートからコピーされます。メンテナンスを容易にするため (サービスを再デプロイするのではなく、ストアド プロシージャとテンプレートを変更してレポート コンテンツを変更します)、コードで特定の列の書式設定、つまり列の塗りつぶしの色を実行したくありません。

SpreadsheetGear のCopyFromDataTableを使用してエクスポートを行います。ただし、InsertCells フラグは、説明が示すように、挿入された行の形式 (列の塗りつぶしの色) をデータに適用しません (「これにより、セルを事前に書式設定できます」)。

InsertCells フラグを使用せず、代わりにテンプレートの列全体に列の塗りつぶしの色を設定することで、これを回避しています。ただし、これにより、使用されている範囲を超えて、列全体が色付けされます。フォーマットを使用範囲に制限したい。

UsedRange以外のフォーマットをクリアする方法はありますか? これを書いているとき、このアプローチが複雑であることに気づきました。ただし、フォーマットは必須であり、ストアド プロシージャの変更とテンプレートの変更のみが必要になるようにメンテナンスを簡素化したいと考えています。私はそれを容易にする他のアプローチを受け入れます。

4

2 に答える 2

2

SetDataFlags .InserCells 列挙型オプションを使用すると、DataTable によってのみ入力された範囲で書式設定を取得できるようにする必要がありますただし、ドキュメントに記載されているように、これを適切に機能させるための正確な要件があります。

「このフラグ [InsertCells] を指定するときは、SpreadsheetGear.Data.SetDataFlags.NoColumnHeaders が指定されていない場合、列ヘッダーの行が前にある正確に 2 行のデータの範囲を指定する必要があります。」

「データ用の 2 行」は、必要に応じてフォーマットする必要があります (内部/塗りつぶしの色など)。SpreadsheetGear に付属の Explorer Samples Solutions (スタート メニュー/画面の SpreadsheetGear フォルダーにあります) には、これを示すサンプルが含まれています。

アップデート

以下は、InsertCells フラグを NoColumnHeaders と組み合わせて使用​​する方法を示す例です。このコードはworksheet、書式設定された範囲が既に設定されており、書式設定された範囲の列数に対応するサイズの DataTable を取得できることを前提としています。

using SpreadsheetGear;
using SpreadsheetGear.Data;

// Generate DataTable.  For this example, let's say it is 5 columns wide and 
// 10 rows deep...
DataTable dataTable = // ...get DataTable...

// We're not interested in a "Column Header" row, so for the above dataTable, 
// an IRange 5 columns wide and 2 rows deep needs to be specified where those
// two rows are already setup with the desired formatting.  In this case B2:F3
// are formatted accordingly.
worksheet.Cells["B2:F3"].CopyFromDataTable(dataTable, SetDataFlags.InsertCells |
    SetDataFlags.NoColumnHeaders);

// Sheet should how have B2:F11 populated with your dataTable data, with all
// rows having picked up the formatting as originally specified in B2:F3
于 2014-02-27T23:18:35.673 に答える