delphi:为什么const设置为这个奇怪的值,使用Excel OLE interop?

对不起,我非常无聊,我想知道为什么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添加到使用条款将让您摆脱search和声明自己的常量的需要。

 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; 

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

这里有一个很好的列表与微软列举,你会看到他们从-4098开始,并从那里使用的值。

http://include.wutils.com/com-dll/constants/constants-Graph.htm