在只装有wps的情况下,delphi6.0怎么实现.xls文件的导入功能 各位大大求教,在只装有wps的情况下,delphi6.0怎么实现.xls文件的导入功能?谢谢了 解决方案 » 免费领取超大流量手机卡,每月29元包185G流量+100分钟通话, 中国电信官方发货 可以用ADO连接打开。 其实WPS是能兼容word的,可以通过oleVariant操作.xsl 与word操作差不多,网上找找相关例子和api 之前在装有office的机器上是可以引用Excel2000.pas的 安装WPS同样有对应的pas单元的,而且Excel2000.pas定义的只是一些变量的,对照word开发手册,那例子都是VBA代码WPS其实与office的API是差不多,只是变量名不同。office中以wd开头,wps就以wps开头,但其指向的值,其实还是一样的 unit UExcelOperator;interfaceuses 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);implementationprocedure 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.GetBook; 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.BookValid(ABookMark) then aDataSet.GotoBook(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. NativeExcel3 还是不太理解,求xsl510079027能否展示一下相关API的资料?十分感谢 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); 但是WPS应该用哪个呢?一直找不到可以用的 我的资源里面有delphi操作WPS,如果你是用ole对象操作的话,下载这个吧。至于引用单元你找找吧,office用Excel2000.pas,wps也是有对应的文件。但是没有也没有关系,Wpsxxx这种变量就是0,1,2,3...助记的 NativeExcel,完全是文件操作,和Office没关系。 我也遇到这个问题了,请大家(xsl510079027,jim80s)帮帮忙解决,万分感谢![email protected] 建议使用XLSReadWriteII4。 请高手指点以下语句什么意思 Delphi 7在windows 2003 server 下连接Sybase 数据库的问题。 郁闷+求助+散分?希望大家能多给我一些帮助,提供一些消息。 急问题? 揭穿软件骗子:“ADSL优化大师“骗人的把戏 安装fastreport说找不到fr_class.dcu?? 紧急求救!关于发布程序的问题 ADO连接的两层数据库的问题 如何把一个文档倒序输出! Delphi DLL动态调用的子窗体怎么判断子窗体是否存在 求一个U盘后台自动复制硬盘上的图片文件 如何查看WebBrowser打开网页后返回的数据头
安装WPS同样有对应的pas单元的,而且Excel2000.pas定义的只是一些变量的,对照word开发手册,那例子都是VBA代码WPS其实与office的API是差不多,只是变量名不同。office中以wd开头,wps就以wps开头,但其指向的值,其实还是一样的
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);implementationprocedure 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.GetBook;
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.BookValid(ABookMark) then
aDataSet.GotoBook(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.
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);