2

Delphi と Excel OLE の自動化に問題があります。次のコードを使用します。

uses
ComObj
var
XlApp: Variant;
begin
L_v.Caption: = 'D:\bd1\support\Vi.xls';
XlApp: = CreateOleObject ('Excel.Application');
XLApp.Visible: = True;
XLApp.WorkBooks.Open (L_vi.Caption);
XLApp.Workbooks [1]. Worksheets. [1] Name: = 'Sheet1';
Sheets: = XLApp.Workbooks [1]. Worksheets ['test'];

しかし、宣言されていない識別子 'Worksheets' 行でエラーが発生します.....

私はなぜなのか理解していない。

4

3 に答える 3

2

(以下の私の編集を参照してください。更新済み:とマークされています。)

これが実際のコードである場合

XLApp.Workbooks [1]. Worksheets. [1] Name: = 'Sheet1';

に構文エラーがありますWorksheets.[1]Name。(.は間違った場所にあります。)

XLApp.Workbooks[1].Worksheets[1].Name := 'Sheet1';

これは、XE3でうまく機能します:

var
  XLApp: OleVariant;
begin
  XLApp := CreateOleObject('Excel.Application');
  XLApp.Visible := True;
  XLApp.Workbooks.Open('C:\Test\Test.xls');
  XLApp.Workbooks[1].Worksheets[1].Name := 'New Sheet Name';
end;

更新:あなたのコメントの後、私はあなたが抱えている問題が何であるかを理解していると思います.

ここであなたを混乱させていると思いError Insightます(赤い下線と「未定義の識別子」ポップアップ、実際には間違っています)。

ここに投稿したコードは、ここに投稿する前に XE3 でコンパイルして実際に実行したもので、動作します。しかし、カーソルを の上に置くとWorksheetsUndeclared identifierポップアップと赤い下線が表示されます。もちろん、それはある意味で正しいです-宣言されてWorksheetsません。CreateOleObjectただし、遅延バインディング (実行時に使用) を使用している場合は、そうである必要はありません。

Error Insightバグがあります(IDEに追加されて以来です)。(バグが修正されていないことがわかった場合) 私が最初に行うことは、それをオフにすることです ([ツール] -> [オプション] -> [エディター オプション] -> [コード インサイト] でError Insight、右側のチェックを外します)。代わりに、実際のコンパイラーに物事を理解させてください。

于 2013-03-29T23:40:00.537 に答える
0

試す...

Var 
Sheet: Olevariant;
...
   for possheet := 1 to newWorkbook.Worksheets.Count do
   Begin
        Sheet:=newWorkbook.Sheets[possheet];
        combobox1.Items.Add(Sheet.Name)
   End;
于 2015-11-14T11:44:38.567 に答える