公司最近准备做一个考试软件,是财政厅要的,其中有word,excel,internet相关操作的判分,因为没做过所以眼下不知该从何入手,有知道的朋友请帮忙留意一下。有相关资料可以发到[email protected],有好的建议也望大家不吝赐教!小可不胜感谢。

解决方案 »

  1.   

    全面控制 Excel
    首先创建 Excel 对象,使用ComObj:
    var ExcelID: Variant;
     ExcelID := CreateOleObject( 'Excel.Application' );
    1) 显示当前窗口:
    ExcelID.Visible := True;
    2) 更改 Excel 标题栏:
    ExcelID.Caption := '应用程序调用 Microsoft Excel';
    3) 添加新工作簿:
      ExcelID.WorkBooks.Add;
    4) 打开已存在的工作簿:
      ExcelID.WorkBooks.Open( 'C:\Excel\Demo.xls' );
    5) 设置第2个工作表为活动工作表:
      ExcelID.WorkSheets[2].Activate;  
     或 ExcelID.WorkSheets[ 'Sheet2' ].Activate;
    6) 给单元格赋值:
     ExcelID.Cells[1,4].Value := '第一行第四列';
    7) 设置指定列的宽度(单位:字符个数),以第一列为例:
     ExcelID.ActiveSheet.Columns[1].ColumnsWidth := 5;
    8) 设置指定行的高度(单位:磅)(1磅=0.035厘米),以第二行为例:
      ExcelID.ActiveSheet.Rows[2].RowHeight := 1/0.035; // 1厘米
    9) 在第8行之前插入分页符:
      ExcelID.WorkSheets[1].Rows[8].PageBreak := 1;
    10) 在第8列之前删除分页符:
      ExcelID.ActiveSheet.Columns[4].PageBreak := 0;
    11) 指定边框线宽度:
     ExcelID.ActiveSheet.Range[ 'B3:D4' ].Borders[2].Weight := 3;
       1-左    2-右   3-顶    4-底   5-斜( \ )     6-斜( / )
    12) 清除第一行第四列单元格公式:
     ExcelID.ActiveSheet.Cells[1,4].ClearContents;
    13) 设置第一行字体属性:
    ExcelID.ActiveSheet.Rows[1].Font.Name := '隶书';
    ExcelID.ActiveSheet.Rows[1].Font.Color  := clBlue;
    ExcelID.ActiveSheet.Rows[1].Font.Bold   := True;
    ExcelID.ActiveSheet.Rows[1].Font.UnderLine := True;
    14) 进行页面设置:
      a.页眉:
        ExcelID.ActiveSheet.PageSetup.CenterHeader := '报表演示';
      b.页脚:
        ExcelID.ActiveSheet.PageSetup.CenterFooter := '第&P页';
      c.页眉到顶端边距2cm:
        ExcelID.ActiveSheet.PageSetup.HeaderMargin := 2/0.035;
      d.页脚到底端边距3cm:
        ExcelID.ActiveSheet.PageSetup.HeaderMargin := 3/0.035;
      e.顶边距2cm:
        ExcelID.ActiveSheet.PageSetup.TopMargin := 2/0.035;
      f.底边距2cm:
        ExcelID.ActiveSheet.PageSetup.BottomMargin := 2/0.035;
      g.左边距2cm:
        ExcelID.ActiveSheet.PageSetup.LeftMargin := 2/0.035;
      h.右边距2cm:
        ExcelID.ActiveSheet.PageSetup.RightMargin := 2/0.035;
      i.页面水平居中:
        ExcelID.ActiveSheet.PageSetup.CenterHorizontally := 2/0.035;
      j.页面垂直居中:
        ExcelID.ActiveSheet.PageSetup.CenterVertically := 2/0.035;
      k.打印单元格网线:
        ExcelID.ActiveSheet.PageSetup.PrintGridLines := True;
    15) 拷贝操作:
      a.拷贝整个工作表:
        ExcelID.ActiveSheet.Used.Range.Copy;
      b.拷贝指定区域:
        ExcelID.ActiveSheet.Range[ 'A1:E2' ].Copy;
      c.从A1位置开始粘贴:
        ExcelID.ActiveSheet.Range.[ 'A1' ].PasteSpecial;
      d.从文件尾部开始粘贴:
        ExcelID.ActiveSheet.Range.PasteSpecial;
     16) 插入一行或一列:
       a. ExcelID.ActiveSheet.Rows[2].Insert;
       b. ExcelID.ActiveSheet.Columns[1].Insert;
     17) 删除一行或一列:
      a. ExcelID.ActiveSheet.Rows[2].Delete;
      b. ExcelID.ActiveSheet.Columns[1].Delete;
     18) 打印预览工作表:
      ExcelID.ActiveSheet.PrintPreview;
     19) 打印输出工作表:
      ExcelID.ActiveSheet.PrintOut;
     20) 工作表保存:
     if not ExcelID.ActiveWorkBook.Saved then
       ExcelID.ActiveSheet.PrintPreview;
     21) 工作表另存为:
      ExcelID.SaveAs( 'C:\Excel\Demo1.xls' );
     22) 放弃存盘:
     ExcelID.ActiveWorkBook.Saved := True;
     23) 关闭工作簿:
     ExcelID.WorkBooks.Close;
     24) 退出 Excel:
    ExcelID.Quit;如何在Delphi中操作Excel
    在数据库应用软件的开发过程中,经常需要把数据转换成Excel文件,让用户作进一步的数据处理。而Delphi是开发数据库应用系统的常用工具,那么,如何在Delphi中操作Excel呢? 
    我们知道,在Microsoft Office软件中有一种内嵌的编程语言VBA,它是一种宏语言,利用它,你可以编写出功能强大的代码,如打开文件、修改数据、保存数据和设置字体等。另一方
    面,Microsoft Office软件中的宏能以VBA代码的形式记录下你的操作过程。因此借助宏操作,可以很轻松地实现某一功能,并把这些代码稍作修改嵌入到你的软件中。但是VBA也存在
    一个缺点,它必须有Microsoft Office作平台,在哪里编写,必须在哪里执行。例如在Excel下编写的一段VBA代码,则它只有在Excel下才能运行。因此,笔者的方法就是把VBA代码嵌入
    到Delphi中,从而实现用Delphi操作Excel。 
      下面,我们以Delphi程序为例,说明这种调用方法: 
      Unit excel; 
      interface 
      uses 
      Windows,Messages,SysUtils,Classes,Graphics,Controls,Forms,Dialogs,StdCtrls,ComObj; 
      //ComObj是操作OLE对象的函数集 
      type TForm1 =class(TForm) 
      Button1: TButton; 
      procedure Button1Click(Sender: TObject); 
      private 
      { Private declarations } 
      public 
      { Public declarations } 
      end; 
      var 
      Form1: TForm1; 
      implementation 
      {$R *.DFM} 
      procedure TForm1.Button1Click(Sender: TObject); 
      var 
      eclApp,WorkBook:Variant; 
      //声明为OLE Automation 对象 
      xlsFileName:string;begin 
      xlsFileName:='ex.xls'; 
      try 
      //创建OLE对象Excel Application与 WorkBook 
      eclApp:=CreateOleObject('Excel.Application'); 
      WorkBook:=CreateOleobject('Excel.Sheet'); 
      except 
      ShowMessage('您的机器里未安装Microsoft Excel。'); 
      Exit; 
      end; 
      try 
      ShowMessage('下面演示:新建一个XLS文件,并写入数据,最后关闭它。'); 
      workBook:=eclApp.workBooks.Add; 
      eclApp.Cells(1 , 1):='字符型'; 
      eclApp.Cells(2 , 1):='Excel文件'; 
      eclApp.Cells(1 , 2):='Money型'; 
      eclApp.Cells(2 , 2):=10.01; 
      eclApp.Cells(1 , 3):='日期型';eclApp.Cells(2 , 3):=Date; 
      WorkBook.saveas(xlsFileName); 
      WorkBook.close; 
      ShowMessage('下面演示:打开刚创建的XLS文件,并修改其中的内容,然后,由用户决定是否保存。'); 
      WorkBook:=eclApp.workBooks.Open(xlsFileName); 
      eclApp.Cells(2 , 1):='Excel文件类型'; 
      if MessageDlg(xlsFileName+'文件已被修改,是否保存?',mtConfirmation, [mbYes, mbNo], 0) = mrYes then 
      WorkBook.save 
      else 
      workBook.Saved := True; //放弃修改 
      WorkBook.Close; 
      eclApp.Quit; 
      //退出Excel Application 
      //释放VARIANT变量 
      eclApp:=Unassigned; 
      except 
      ShowMessage('不能正确操作Excel文件。可能是该文件已被其他程序打开,或系统错误。'); 
      WorkBook.close; 
      eclApp.Quit; 
      //释放VARIANT变量 
      eclApp:=Unassigned; 
      end; 
      end; 
      end. 
      经过上述操作过程后,我们就可以很放心地将数据库中的数据转换成Excel文件了。
      

  2.   

    在Delphi 5中简单地封装了一组Microsoft Office自动化对象(Automation servers)。
    它使得我们很容易地把Office中的应用程序(Word, Excel, PowerPoint, Outlook and
     Access等)当作一个com应用服务器进行控制。在Delphi 5中已经带了Word与PowerPoint
    的例子,因为Excel的调用与这两个应用服务器的调用略有不同,所以本人根据这两个例子
    写了个Excel 97的简单例子以供参考。 
    步聚 
    创建一个普通Application。
    在Form中分别放入ExcelApplication, ExcelWorkbook和ExcelWorksheet。
    连接Excel 97,具体方法如下: 
    打开Excel97。
    Try
         ExcelApplication1.Connect;
         Except
         End;
         ExcelApplication1.Visible[0]:=True;
    增加一个Workbook。
    ExcelWorkbook1.ConnectTo(ExcelApplication1.
    Workbooks.Add(EmptyParam,0));
    添加一个Worksheet。
     var
      Temp_Worksheet: _WorkSheet;
      begin
      Try
      Temp_Worksheet:=ExcelWorkbook1.
      WorkSheets.Add(EmptyParam,
    EmptyParam,EmptyParam,EmptyParam,0) 
    as _WorkSheet;//(注意)
    ExcelWorkSheet1.ConnectTo(Temp_WorkSheet);
    Except
    ShowMessage('Failure');
                 End;
            end;
    关闭Excel.
     Try
     ExcelApplication1.Quit;
     ExcelWorksheet1.Disconnect;
     ExcelWorkbook1.Disconnect;
     ExcelApplication1.Disconnect;
     Except
     End;
    对Excel的一些操作: 
    选择当前Workbook的某一Worksheet.
    procedure TForm1.ComboBox1DropDown
    (Sender: TObject);
    var
       i: Integer;
    begin
         ComboBox1.Clear;
         For i:=1 to ExcelWorkbook1.
         Worksheets.Count do
          ComboBox1.Items.Add
            ((ExcelWorkbook1.Worksheets.Item[i] 
            as _WorkSheet).Name);
    end;
    procedure TForm1.ComboBox1Change
    (Sender: TObject);
    begin
         ExcelWorkSheet1.ConnectTo
    (ExcelWorkbook1.Worksheets.Item
     [ComboBox1.ItemIndex+1] as _WorkSheet);
         ExcelWorkSheet1.Activate;
    end;
    选择某一Workbook:
    procedure TForm1.ComboBox2DropDown
    (Sender: TObject);
    var
       i: Integer;
    begin
    ComboBox2.Clear;
    if ExcelApplication1.Workbooks.Count >0 then
    For i:=1 to ExcelApplication1.Workbooks.Count do
    Combobox2.Items.Add(ExcelApplication1.
    Workbooks.Item[i].Name);
    end;
    procedure TForm1.ComboBox2Change(Sender: TObject);
    begin
    ExcelWorkSheet1.Disconnect;
    ExcelWorkBook1.ConnectTo(ExcelApplication1.Workbooks.
    Item[Combobox2.ItemIndex+1]);
         ExcelWorkBook1.Activate;
         ExcelWorksheet1.ConnectTo(ExcelWorkBook1.
    ActiveSheet as _WorkSheet);
         ExcelWorkSheet1.Activate;
    end;
    对某一单元格进行赋值及取值。
    procedure TForm1.Button5Click(Sender: TObject);
    begin
         ExcelWorksheet1.Cells.Item[SpinEdit2.Value,
    SpinEdit1.Value]:=Edit1.Text;
    end;
    procedure TForm1.Button6Click(Sender: TObject);
    begin
         Edit1.Text:=ExcelWorksheet1.Cells.Item[
    SpinEdit2.Value,SpinEdit1.Value];
    end;
    选择某一区域
    ExcelWorkSheet1.Range['A1','C1'].Select;
    打开一个Excel文件。
         if OpenDialog1.Execute then
            Begin
                 Try
    ExcelWorkBook1.ConnectTo
    (ExcelApplication1.Workbooks.Open
         (OpenDialog1.FileName,
    EmptyParam,EmptyParam,EmptyParam,
    EmptyParam,EmptyParam,
    EmptyParam,EmptyParam,EmptyParam,
         EmptyParam,EmptyParam,
    EmptyParam,EmptyParam,0));
         ExcelWorkSheet1.ConnectTo
    (ExcelWorkBook1.Activesheet
           as _Worksheet);
                 Except;
                 End;
            End;搜索一下以前的帖子,有介绍的
      

  3.   

    楼上的是控制Excel,word,可人家是要那种考试的题目之类怎么做,不是这个东西把,人家那个肯定不是用delphi做的,估计是用多媒体制作教学工具之类的东西做的吧,像AutoWare之类吧,我想
      

  4.   

    procedure TFrmMain.WriteExcel(AdsData: TADODataSet; sName, Title: string);
    var
    ExcelApplication1: TExcelApplication;
    ExcelWorksheet1: TExcelWorksheet;
    ExcelWorkbook1: TExcelWorkbook;
    i, j: integer;
    filename: string;
    begin
    filename := concat(extractfilepath(application.exename), sName, ’.xls’);
    try
    ExcelApplication1 := TExcelApplication.Create(Application);
    ExcelWorksheet1 := TExcelWorksheet.Create(Application);
    ExcelWorkbook1 := TExcelWorkbook.Create(Application);
    ExcelApplication1.Connect;
    except
    Application.Messagebox(’Excel 没有安装!’, ’Hello’, MB_ICONERROR + mb_Ok);
    Abort;
    end;
    try
    ExcelApplication1.Workbooks.Add(EmptyParam, 0);
    ExcelWorkbook1.ConnectTo(ExcelApplication1.Workbooks[1]);
    ExcelWorksheet1.ConnectTo(ExcelWorkbook1.Worksheets[1] as _worksheet);
    AdsData.First;
    for j := 0 to AdsData.Fields.Count - 1 do
    begin
    ExcelWorksheet1.Cells.item[3, j + 1] := AdsData.Fields[j].DisplayLabel;
    ExcelWorksheet1.Cells.item[3, j + 1].font.size := ’10’;
    end;
    for i := 4 to AdsData.RecordCount + 3 do
    begin
    for j := 0 to AdsData.Fields.Count - 1 do
    begin
    ExcelWorksheet1.Cells.item[i, j + 1] :=
    AdsData.Fields[j].Asstring;
    ExcelWorksheet1.Cells.item[i, j + 1].font.size := ’10’;
    end;
    AdsData.Next;
    end;
    ExcelWorksheet1.Columns.AutoFit;
    ExcelWorksheet1.Cells.item[1, 2] := Title;
    ExcelWorksheet1.Cells.Item[1, 2].font.size := ’14’;
    ExcelWorksheet1.SaveAs(filename);
    Application.Messagebox(pchar(’数据成功导出’ + filename), ’Hello’,
    mb_Ok);
    finally
    ExcelApplication1.Disconnect;
    ExcelApplication1.Quit;
    ExcelApplication1.Free;
    ExcelWorksheet1.Free;
    ExcelWorkbook1.Free;
    end;
    end; 
      

  5.   

    上一个是把数据库导到Excel中
    下面是关于Word的
    打开word文件。
        procedure TfjfsglForm.SpeedButton4Click(Sender: TObject);
        var
        MSWord: Variant;
        str:string; 
        begin
          if trim(DataModule1.adoquery27.fieldbyname('fjmc').asstring)<>'' then
          begin
            str:=trim(DataModule1.ADOQuery27.fieldbyname('fjmc').AsString);
            MSWord:= CreateOLEObject('Word.Application');//
            MSWord.Documents.Open('d:\Program Files\Common Files\Sfa\'+str, True);//
            MSWord.Visible:=1;//
            str:='';
            MSWord.ActiveDocument.Range(0, 0);//
            MSWord.ActiveDocument.Range.InsertAfter(str);//?úWord?D???ó×?·?'Title'
            MSWord.ActiveDocument.Range.InsertParagraphAfter;
          end
          else
          showmessage('');
        end;word文件传入和传出数据库。
        uses IdGlobal;
        procedure TdjhyForm.SpeedButton2Click(Sender: TObject);
        var
        sfilename:string;
        function BlobContentTostring(const Filename:string):string;
        begin
          with Tfilestream.Create(filename,fmopenread)  do
          try
            setlength(result,size);
            read(pointer(result)^,size);
          finally
            free;
          end;
        end;
        begin
          if opendialog1.Execute then
          begin
            sfilename:=opendialog1.FileName;
            DataModule1.ADOQuery14.Edit;
            DataModule1.ADOQuery14.FieldByName('word').AsString:=blobcontenttostring(sfilename);
            DataModule1.ADOQuery14.Post;
          end;
        end;
        procedure TdjhyForm.SpeedButton1Click(Sender: TObject);
        var
        sfilename:string;
        bs:Tadoblobstream;
        begin
          bs:=Tadoblobstream.Create(TBLOBfield(DataModule1.ADOQuery14.FieldByName('word')),bmread);
          try
            sfilename:=extractfilepath(application.ExeName)+trim(DataModule1.adoquery14.fieldbyname('hybh').AsString);
            sfilename:=sfilename+'.'+'doc';
            bs.SaveToFile(sfilename);
            try
              djhyopenform:=Tdjhyopenform.Create(self);
              djhyopenform.olecontainer1.CreateObjectFromFile(sfilename,false);
              djhyopenform.OleContainer1.Iconic:=true;
              djhyopenform.ShowModal;
            finally
              djhyopenform.Free;
            end;
          finally
            bs.free;
          end;
        end;
      

  6.   

    大家这么热心,在此深表感谢!
      同时发表一些个人看法:我的意思是当进行word,excel操作时,对它们的操作进行保存,这个是不难实现的,但是因为考题不会固定,操作的方法也大不一样,所以判分就成了难点所在:用友、金蝶这类软件是有固定的数据库结构的,所以不管怎么操作,结果(不同字段内容)都存放在数据库某一固定位置,但是office这类的软件可没有固定的数据库。不过有一点,它对文件的所有操作都是有固定模式的,所以只要能设计出类似的数据库(出题的题库),再加上对word、excel操作的控制,判分应该就可以实现了。
      我实在想不出更好的办法了,还望大家能给小弟提些好的建议!
      

  7.   

    在Delphi 5中简单地封装了一组Microsoft Office自动化对象(Automation servers)。
    它使得我们很容易地把Office中的应用程序(Word, Excel, PowerPoint, Outlook and
     Access等)当作一个com应用服务器进行控制。在Delphi 5中已经带了Word与PowerPoint
    的例子,因为Excel的调用与这两个应用服务器的调用略有不同,所以本人根据这两个例子
    写了个Excel 97的简单例子以供参考。 
    步聚 
    创建一个普通Application。
    在Form中分别放入ExcelApplication, ExcelWorkbook和ExcelWorksheet。
    连接Excel 97,具体方法如下: 
    打开Excel97。
    Try
         ExcelApplication1.Connect;
         Except
         End;
         ExcelApplication1.Visible[0]:=True;
    增加一个Workbook。
    ExcelWorkbook1.ConnectTo(ExcelApplication1.
    Workbooks.Add(EmptyParam,0));
    添加一个Worksheet。
     var
      Temp_Worksheet: _WorkSheet;
      begin
      Try
      Temp_Worksheet:=ExcelWorkbook1.
      WorkSheets.Add(EmptyParam,
    EmptyParam,EmptyParam,EmptyParam,0) 
    as _WorkSheet;//(注意)
    ExcelWorkSheet1.ConnectTo(Temp_WorkSheet);
    Except
    ShowMessage('Failure');
                 End;
            end;
    关闭Excel.
     Try
     ExcelApplication1.Quit;
     ExcelWorksheet1.Disconnect;
     ExcelWorkbook1.Disconnect;
     ExcelApplication1.Disconnect;
     Except
     End;
    对Excel的一些操作: 
    选择当前Workbook的某一Worksheet.
    procedure TForm1.ComboBox1DropDown
    (Sender: TObject);
    var
       i: Integer;
    begin
         ComboBox1.Clear;
         For i:=1 to ExcelWorkbook1.
         Worksheets.Count do
          ComboBox1.Items.Add
            ((ExcelWorkbook1.Worksheets.Item[i] 
            as _WorkSheet).Name);
    end;
    procedure TForm1.ComboBox1Change
    (Sender: TObject);
    begin
         ExcelWorkSheet1.ConnectTo
    (ExcelWorkbook1.Worksheets.Item
     [ComboBox1.ItemIndex+1] as _WorkSheet);
         ExcelWorkSheet1.Activate;
    end;
    选择某一Workbook:
    procedure TForm1.ComboBox2DropDown
    (Sender: TObject);
    var
       i: Integer;
    begin
    ComboBox2.Clear;
    if ExcelApplication1.Workbooks.Count >0 then
    For i:=1 to ExcelApplication1.Workbooks.Count do
    Combobox2.Items.Add(ExcelApplication1.
    Workbooks.Item[i].Name);
    end;
    procedure TForm1.ComboBox2Change(Sender: TObject);
    begin
    ExcelWorkSheet1.Disconnect;
    ExcelWorkBook1.ConnectTo(ExcelApplication1.Workbooks.
    Item[Combobox2.ItemIndex+1]);
         ExcelWorkBook1.Activate;
         ExcelWorksheet1.ConnectTo(ExcelWorkBook1.
    ActiveSheet as _WorkSheet);
         ExcelWorkSheet1.Activate;
    end;
    对某一单元格进行赋值及取值。
    procedure TForm1.Button5Click(Sender: TObject);
    begin
         ExcelWorksheet1.Cells.Item[SpinEdit2.Value,
    SpinEdit1.Value]:=Edit1.Text;
    end;
    procedure TForm1.Button6Click(Sender: TObject);
    begin
         Edit1.Text:=ExcelWorksheet1.Cells.Item[
    SpinEdit2.Value,SpinEdit1.Value];
    end;
    选择某一区域
    ExcelWorkSheet1.Range['A1','C1'].Select;
    打开一个Excel文件。
         if OpenDialog1.Execute then
            Begin
                 Try
    ExcelWorkBook1.ConnectTo
    (ExcelApplication1.Workbooks.Open
         (OpenDialog1.FileName,
    EmptyParam,EmptyParam,EmptyParam,
    EmptyParam,EmptyParam,
    EmptyParam,EmptyParam,EmptyParam,
         EmptyParam,EmptyParam,
    EmptyParam,EmptyParam,0));
         ExcelWorkSheet1.ConnectTo
    (ExcelWorkBook1.Activesheet
           as _Worksheet);
                 Except;
                 End;
            End;