未声明的标识符.WorkSheets OLE Excel

时间:2013-03-29 23:06:45

标签: delphi delphi-xe2

我遇到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'];

但是我收到了错误 未声明的标识符'工作表'在第.....行。

我不明白为什么。

3 个答案:

答案 0 :(得分: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中编译并实际执行的,并且它有效。但如果我将光标放在Worksheets上,我会看到Undeclared identifier弹出窗口和红色下划线。当然,它在某种程度上是正确的 - Worksheets 声明。但是,当您使用后期绑定(在运行时使用CreateOleObject)时,它不一定是必须的。

Error Insight是错误的(自从它被添加到IDE以来)。我做的第一件事(当我看到bug尚未修复时)将其关闭(工具 - >选项 - >编辑器选项 - > Code Insight,取消选中右侧的Error Insight)。让真正的编译器改变现状。

答案 1 :(得分:0)

...试

Var 
Sheet: Olevariant;
...
   for possheet := 1 to newWorkbook.Worksheets.Count do
   Begin
        Sheet:=newWorkbook.Sheets[possheet];
        combobox1.Items.Add(Sheet.Name)
   End;

答案 2 :(得分:0)

以这种方式在excel中使用excel有点困难,因为您看不清建议。

我将使用const find = (mapArr, type) => { for (let i = 0; i < mapArr.length; i++) { for (let j = 0; j < mapArr[i].length; j++) { switch (type) { case 'gold': { if (mapArr[i][j] === 'R') return [j, i]; } case 'silver': { if (mapArr[i][j] === 'S') { return [j, i]; } } case 'bronze': { if (mapArr[i][j] === 'M') { return [j, i]; } } default: continue; } } } }; find( [ // COLUMNS ARE X // 0 1 2 3 4 5 ['s', 'R', 's', 'S', 'n', 'M'], // 0 ROWS ARE Y ['s', 'M', 's', 'S', 'r', 'M'], // 1 ['s', 'M', 's', 'R', 'r', 'm'], // 2 ['S', 'r', 's', 'm', 'r', 'M'], // 3 ['S', 'r', 's', 'm', 'r', 'M'], // 4 ['S', 'r', 'S', 'M', 'M', 'S'] // 5 ], 'bronze' ) Variant粘贴一些代码,以便您使用。

Excel

VBA API Microsoft documentation中,您可以找到更多信息。