各位大大求教,在只装有wps的情况下,delphi6.0怎么实现.xls文件的导入功能?谢谢了

解决方案 »

  1.   

    可以用ADO连接打开。
      

  2.   

    其实WPS是能兼容word的,可以通过oleVariant操作.xsl 与word操作差不多,网上找找相关例子和api
      

  3.   

    之前在装有office的机器上是可以引用Excel2000.pas的
      

  4.   


    安装WPS同样有对应的pas单元的,而且Excel2000.pas定义的只是一些变量的,对照word开发手册,那例子都是VBA代码WPS其实与office的API是差不多,只是变量名不同。office中以wd开头,wps就以wps开头,但其指向的值,其实还是一样的
      

  5.   

    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.
      

  6.   

    NativeExcel3
      

  7.   

    还是不太理解,求xsl510079027能否展示一下相关API的资料?十分感谢
      

  8.   

     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);
      

  9.   

    但是WPS应该用哪个呢?一直找不到可以用的
      

  10.   

    我的资源里面有delphi操作WPS,如果你是用ole对象操作的话,下载这个吧。至于引用单元你找找吧,office用Excel2000.pas,wps也是有对应的文件。但是没有也没有关系,Wpsxxx这种变量就是0,1,2,3...助记的
      

  11.   

    NativeExcel,完全是文件操作,和Office没关系。
      

  12.   

    我也遇到这个问题了,请大家(xsl510079027,jim80s)帮帮忙解决,万分感谢![email protected]
      

  13.   

    建议使用XLSReadWriteII4。