各位大大求教,在只裝有wps的情況下,delphi6.0怎么實作.xls檔案的匯入功能?謝謝了
uj5u.com熱心網友回復:
可以用ADO連接打開。uj5u.com熱心網友回復:
其實WPS是能兼容word的,可以通過oleVariant操作.xsl 與word操作差不多,網上找找相關例子和apiuj5u.com熱心網友回復:
之前在裝有office的機器上是可以參考Excel2000.pas的uj5u.com熱心網友回復:
安裝WPS同樣有對應的pas單元的,而且Excel2000.pas定義的只是一些變數的,對照word開發手冊,那例子都是VBA代碼
WPS其實與office的API是差不多,只是變數名不同。office中以wd開頭,wps就以wps開頭,但其指向的值,其實還是一樣的
uj5u.com熱心網友回復:
unit UExcelOperator;interface
uses
Windows, DB, Classes, SysUtils, Dialogs;
type
TExcelCls = class(TOBject)
private
{ Private declarations }
public
{ Public declarations }
procedure SaveDataToExcel(aDataSet: TDataSet);
end;
var
arXlsBegin: array[0..5] of Word = ($809, 8, 0, $10, 0, 0);
arXlsEnd: array[0..1] of Word = ($0A, 00);
arXlsString: array[0..5] of Word = ($204, 0, 0, 0, 0, 0);
arXlsNumber: array[0..4] of Word = ($203, 14, 0, 0, 0);
arXlsInteger: array[0..4] of Word = ($27E, 10, 0, 0, 0);
arXlsBlank: array[0..4] of Word = ($201, 6, 0, 0, $17);
implementation
procedure ExportExcelFile(FileName: string; bWriteTitle: Boolean; aDataSet: TDataSet);
var
i: integer;
Col, row: word;
ABookMark: TBookMark;
aFileStream: TFileStream;
procedure incColRow; //增加行列號
begin
if Col = ADataSet.FieldCount - 1 then
begin
Inc(Row);
Col := 0;
end
else
Inc(Col);
end;
procedure WriteStringCell(AValue: string); //寫字串資料
var
L: Word;
begin
L := Length(AValue);
arXlsString[1] := 8 + L;
arXlsString[2] := Row;
arXlsString[3] := Col;
arXlsString[5] := L;
aFileStream.WriteBuffer(arXlsString, SizeOf(arXlsString));
aFileStream.WriteBuffer(Pointer(AValue)^, L);
IncColRow;
end;
procedure WriteIntegerCell(AValue: integer); //寫整數
var
V: Integer;
begin
arXlsInteger[2] := Row;
arXlsInteger[3] := Col;
aFileStream.WriteBuffer(arXlsInteger, SizeOf(arXlsInteger));
V := (AValue shl 2) or 2;
aFileStream.WriteBuffer(V, 4);
IncColRow;
end;
procedure WriteFloatCell(AValue: double); //寫浮點數
begin
arXlsNumber[2] := Row;
arXlsNumber[3] := Col;
aFileStream.WriteBuffer(arXlsNumber, SizeOf(arXlsNumber));
aFileStream.WriteBuffer(AValue, 8);
IncColRow;
end;
begin
// i:=0;
if FileExists(FileName) then
DeleteFile(FileName); //檔案存在,先洗掉
aFileStream := TFileStream.Create(FileName, fmCreate);
try //寫檔案頭
aFileStream.WriteBuffer(arXlsBegin, SizeOf(arXlsBegin)); //寫列頭
Col := 0;
Row := 0;
if bWriteTitle then
begin
for i := 0 to aDataSet.FieldCount - 1 do
WriteStringCell(aDataSet.Fields[i].FieldName);
end; //寫資料集中的資料
aDataSet.DisableControls;
ABookMark := aDataSet.GetBookmark;
aDataSet.First;
while not aDataSet.Eof do
begin
for i := 0 to aDataSet.FieldCount - 1 do
case ADataSet.Fields[i].DataType of
ftSmallint, ftInteger, ftWord, ftAutoInc, ftBytes:
WriteIntegerCell(aDataSet.Fields[i].AsInteger);
ftFloat, ftCurrency, ftBCD:
WriteFloatCell(aDataSet.Fields[i].AsFloat)
else
WriteStringCell(aDataSet.Fields[i].AsString);
end;
aDataSet.Next;
end;
//寫檔案尾
AFileStream.WriteBuffer(arXlsEnd, SizeOf(arXlsEnd));
if ADataSet.BookmarkValid(ABookMark) then
aDataSet.GotoBookmark(ABookMark);
finally
AFileStream.Free;
ADataSet.EnableControls;
end;
end;
procedure TExcelCls.SaveDataToExcel(aDataSet: TDataSet);
var
StrSaveFile: string;
SaveDialog: TSaveDialog;
begin
try
SaveDialog := TSaveDialog.Create(nil);
SaveDialog.Filter := 'Microsoft Excel 檔案|*.xls';
SaveDialog.FileName := '查詢結果.xls';
SaveDialog.Options := [ofOverwritePrompt, ofHideReadOnly, ofEnableSizing];
if SaveDialog.Execute then
begin
StrSaveFile := SaveDialog.FileName;
ExportExcelFile(StrSaveFile, true, aDataSet);
end;
SaveDialog.Free;
finally
end;
end;
end.
uj5u.com熱心網友回復:
NativeExcel3uj5u.com熱心網友回復:
還是不太理解,求xsl510079027能否展示一下相關API的資料?十分感謝uj5u.com熱心網友回復:
ExcelApp := TExcelApplication.Create(nil);ExcelWorkbook := TExcelWorkbook.Create(nil);
ExcelWorksheet := TExcelWorksheet.Create(nil);
ExcelApp.Connect;
ExcelApp.Visible[0]:= False;
ExcelWorkbook.ConnectTo(ExcelApp.Workbooks.Open(sFileName,
EmptyParam, EmptyParam, EmptyParam, EmptyParam, EmptyParam,
EmptyParam, EmptyParam, EmptyParam, EmptyParam, EmptyParam,
EmptyParam, EmptyParam,0));
ExcelWorksheet.ConnectTo((ExcelWorkbook.Worksheets.Item[1]) As _Worksheet);
uj5u.com熱心網友回復:
但是WPS應該用哪個呢?一直找不到可以用的uj5u.com熱心網友回復:
我的資源里面有delphi操作WPS,如果你是用ole物件操作的話,下載這個吧。至于參考單元你找找吧,office用Excel2000.pas,wps也是有對應的檔案。但是沒有也沒有關系,Wpsxxx這種變數就是0,1,2,3...助記的uj5u.com熱心網友回復:
xsl510079027,我可能積分不夠下載您的資源,如果方便能幫忙發到[email protected],萬分感謝!!!uj5u.com熱心網友回復:
NativeExcel,完全是檔案操作,和Office沒關系。uj5u.com熱心網友回復:
已發相關資料
uj5u.com熱心網友回復:
uj5u.com熱心網友回復:
謝謝各位的幫忙,已解決!uj5u.com熱心網友回復:
我也遇到這個問題了,請大家(xsl510079027,jim80s)幫幫忙解決,萬分感謝![email protected]uj5u.com熱心網友回復:
建議使用XLSReadWriteII4。轉載請註明出處,本文鏈接:https://www.uj5u.com/houduan/130114.html
標籤:VCL組件開發及應用
