Delphi:为什么使用Excel OLE互操作将常量设置为这个奇怪的值?

Delphi:为什么使用Excel OLE互操作将常量设置为这个奇怪的值?,excel,delphi,ole,Excel,Delphi,Ole,对不起,我很抱歉,我想知道为什么constlWBATWorkSheet设置在编号-4167处。 谢谢,杰克 function TForm1.SaveAsExcelFile(AGrid: TStringGrid; ASheetName, AFileName: string): boolean; const xlWBATWorksheet = -4167; var righe, colonne: Integer; GridPrevFile: string; XLApp, Sheet, Data: O

对不起,我很抱歉,我想知道为什么const
lWBATWorkSheet
设置在编号
-4167
处。 谢谢,杰克

function TForm1.SaveAsExcelFile(AGrid: TStringGrid; ASheetName, AFileName: string): boolean;
const
xlWBATWorksheet = -4167;
var
righe, colonne: Integer;
GridPrevFile: string;
XLApp, Sheet, Data: OLEVariant;
l, s: Integer;
begin
  // Prepare Data
  Data := VarArrayCreate([1, AGrid.RowCount, 1, AGrid.ColCount], varVariant);
  for l := 0 to AGrid.ColCount - 1 do
    for s := 0 to AGrid.RowCount - 1 do
      Data[s + 1, l + 1] := AGrid.Cells[l, s];
  // Create Excel-OLE Object
  Result := False;
  XLApp := CreateOleObject('Excel.Application');
  try
  // Hide Excel
    XLApp.Visible := False;
  // Add new Workbook
    XLApp.Workbooks.Add(xlWBatWorkSheet);
    Sheet := XLApp.Workbooks[1].WorkSheets[1];
    Sheet.Name := ASheetName;
  // Fill up the sheet
    Sheet.Range[RefToCell(1, 1), RefToCell(AGrid.RowCount,AGrid.ColCount)].Value := Data;
  // Save Excel Worksheet
    try
      XLApp.Workbooks[1].SaveAs(AFileName);
      Result := True;
    except
      ShowMessage('Fatal Error!');
    end;
    finally
    // Quit Excel
    if not VarIsEmpty(XLApp) then
    begin
      XLApp.DisplayAlerts := False;
      XLApp.Quit;
      XLAPP := Unassigned;
      Sheet := Unassigned;
     end;
    end;
   end;

将excel2000或excel97添加到use子句将使您无需自行搜索和声明常量

implementation
uses  excel2000;
{$R *.dfm}

procedure TForm3.FormCreate(Sender: TObject);
begin
    Showmessage(Format('Unsigned %u, Signed %d', [xlWBATWorksheet , xlWBATWorksheet]));
    // will return Unsigned 4294963129, Signed -4167
end;

将excel2000或excel97添加到use子句将使您无需自行搜索和声明常量

implementation
uses  excel2000;
{$R *.dfm}

procedure TForm3.FormCreate(Sender: TObject);
begin
    Showmessage(Format('Unsigned %u, Signed %d', [xlWBATWorksheet , xlWBATWorksheet]));
    // will return Unsigned 4294963129, Signed -4167
end;

这是一个枚举。可能是这个值,因为它是列表中的下一个自由值

下面是一个很好的Microsofts枚举列表,您将看到它们从-4098开始,并使用从那里开始的值


这是一个枚举。可能是这个值,因为它是列表中的下一个自由值

下面是一个很好的Microsofts枚举列表,您将看到它们从-4098开始,并使用从那里开始的值


它是Excel常量XLWBATWORKEY的值。请尝试使用excel宏
MsgBox(XLWBATWORKEM)
,因为这是开发人员选择的版本。@DavidHeffernan我想问题的目的不是
why
,而是从哪里知道所需的值。它是excel常量XLWBATWORKEM的值。请尝试使用excel宏
MsgBox(XLWBATWORKEY)
,因为这是开发人员选择的版本。@DavidHeffernan我想问题的目的不是
为什么
,而是从哪里知道所需的值。一旦我们这样做了,我们就可以根据自己的意愿使用早期绑定了!一旦我们做到这一点,我们可以使用早期绑定,如果我们希望!