1

現在、新しい Excel スプレッドシートを作成し、それに書き込み、スプレッドシートを X++ で保存できます。

新しいクラス内にいくつかのメソッドがあり、それぞれがワークブック内の個別のワークシートに書き込むことを目的としています。

最初の方法では、スプレッドシートを作成し、データを書き込み、スプレッドシートを保存してから、Excel を正常に終了します。しかし、次の方法では、保存したスプレッドシートを開こうとし、別のワークシート (タブ) に書き込み、再度保存して Excel を終了します。

2 番目の方法では、次のエラーが発生します。クラス '_Workbook' の COM オブジェクトのメソッド'saveAs'がエラー コード 0x800A03EC () を返しました。別の名前を選択するか、保存する前に他のブックまたはアドインを閉じてください。

X++ で 1 つの Excel ワークブック内に複数の Excel ワークシートを作成して保存することはできますか?

4

3 に答える 3

1

これはあなたの質問に対する直接の答えではないかもしれませんが、Excelファイルを作成する上で別の見方をするかもしれません。

私はXMLとXSLTを使用してExcelファイルを作成する傾向があります。Excelで必要なものを簡単に作成し、ExcelファイルをXMLとして保存してから、別のXMLファイルからデータを読み取って目的のExcelファイルに配置するXSLTを適用できます。

このトピックに関する投稿は、私のブログにあります。C#、XML、およびXSLTを使用したExcelファイルの作成

そこで、Itemsを含むXMLファイルを作成し、それをExcelファイルに変換します。

于 2013-01-03T19:53:47.903 に答える
1

Jan さん、返信ありがとうございます

SysDataExcelCOMクラスを確認すると、Excel データ定義エクスポート用の追加のワークシートを作成するCreateWorkbookメソッドがあります新しい同様のクラス メソッドを作成し、Excel ワークシートに対して独自の定義名セット (#define.ExampleExcelWorksheetName('abcSheet')) を宣言した後、複数のワークシートを含む Excel ワークブックを作成できました。次に (SysExcelWorkbook.saveAs を保存します) ) 必要なすべてのシートが最初に作成された後、保存されたワークブックを開いて新しいクラス メソッドごとにワークシートを追加するのではなく。

ワークシートにデータを書き込む他のクラス メソッド内で、CreateWorkbook (sysExcelWorkbooks.open(yourExcelFile)) と同様の新しいメソッドによって作成されたワークブックを開き、(sysExcelWorksheet.itemByName) を使用して各ワークシートを参照してデータを書き込みます。特定のワークシートに追加し、保存します。

excelApplication    = SysExcelApplication::construct();
excelWorkbooks      = excelApplication.workbooks();
excelWorkbooks.open(fileNameSave);
excelWorkbook       = excelWorkbooks.item(1);

//Add styles and fonts
excelStyles = excelWorkbook.styles();
excelStyle  = excelStyles.add("Header");
excelFont   = excelStyle.font();
excelFont.bold(true);

excelWorksheets     = excelWorkbook.worksheets();
excelWorksheet      = excelWorksheets.itemFromName(#declared name of your worksheet);

// Begin Header Row
excelWorksheet.cells().item(1,1).value("value of your choice");
excelWorksheet.cells().item(1,2).value("value of your choice");
excelWorksheet.rows().item(1).style("Header");

excelWorksheet.name("Rename your declared worksheet name or use current name here");
excelCells          = excelWorksheet.cells();
excelCells.range('A:B').numberFormat('@');

//Find you data to write to Excel Worksheet here

excelWorksheet.columns().autoFit();
excelApplication.displayAlerts(false);
excelWorkbook.saveAs(fileNameSave);
excelWorkbook.comObject().save();
excelWorkbook.saved(true);
excelApplication.quit();

このルートに行くことは私にとってうまくいきました。

于 2013-01-03T14:18:42.647 に答える
0

Excel COM サービスの ID を確認してください。他の人が何をしたかを参照してください

于 2012-12-22T07:11:53.020 に答える