好文档就是一把金锄头!
欢迎来到金锄头文库![会员中心]
电子文档交易市场
安卓APP | ios版本
电子文档交易市场
安卓APP | ios版本

Delphi表格控件DBGridEh应用实例6-.docx

12页
  • 卖家[上传人]:碎****木
  • 文档编号:234606184
  • 上传时间:2022-01-04
  • 文档格式:DOCX
  • 文档大小:30.31KB
  • / 12 举报 版权申诉 马上下载
  • 文本预览
  • 下载提示
  • 常见问题
    • 6.输入/输出1) 导入导出数据导入/导出数据在实际处理过程中是比较烦琐的但是 Enl ib3.0提供了一系列函数让你轻松实现此功能,而且支持的文件格式很多: Text, Csv, HTML, RTF, XLS 和内部数据格式除此之外,还可对任意选择的数据区域进行操作函数如下: Pascal:SaveDBGridEhToExportFile(TDBGridEhExportAsText,DBGridEh1,'c:\temp\file1.txt',False);C++:SaveDBGridEhToExportFile( classid(TDBGridEhExportAsText),DBGridEh1,"c:\\t emp\\file1.txt",false);说明:其中 false参数表示导出的是选中的局部数据区域数据,true则为整 个表格数据例:将当前表格中数据导出为 EXCEL S 格式文件在窗体中添加一个 SaveDialog 组件和 导出”按钮 B_exp, 在 导出”按钮的 click 事件中添加如下代码:procedure TForm1.B_expClick(Sender: TObject); varExpClass:TDBGridEhExportClass;Ext:String;BeginSaveDialog1.FileName := 'file1';1 / 12if (ActiveControl is TDBGridEh) thenif SaveDialog1.Execute then begincase SaveDialog1.FilterIndex of1: begin ExpClass := TDBGridEhExportAsText; Ext := 'txt'; end; 2: begin ExpClass := TDBGridEhExportAsCSV; Ext := 'csv'; end; 3: begin ExpClass := TDBGridEhExportAsHTML; Ext := 'htm'; end;4:beginExpClass:=TDBGridEhExportAsRTF;Ext:='rtf';end;5:beginExpClass:=TDBGridEhExportAsXLS;Ext:='xls';end;elseExpClass :=nil;Ext:= '';end;if ExpClassnilthenbeginif UpperCase(Copy(SaveDialog1.FileName,Length(SaveDialog1.FileName)-2,3)) UpperCase(Ext) thenSaveDialog1.FileName := SaveDialog1.FileName + '.' + Ext; SaveDBGridEhToExportFile(ExpClass,DBGridEh1,SaveDialog1.FileName,False);//其中 false为局部数据end;end;3 / 12end;2) 从多种格式导入 /导出数据到 TDBGridEhEhLib 的函数集可以从 DBGridEh 导出数据到 Text, Csv, HTML, RTF, XI以及其 内部格式。

      它可以保存数据到流(TStream 对象)或文件例子 Pascal:SaveDBGridEhToExportFile(TDBGridEhExportAsText,DBGridEh1,'c:/temp/file1.txt',False); C++:SaveDBGridEhToExportFile( classid(TDBGridEhExportAsText),DBGridEh1,"c://t emp//file1.txt",false); E的hL函ib数集可以从 Text 以及其内部格式的数据导入到DBGridEh 的数据集中它可以从文件中读取数据或读取数据到流( 对象)3) DBGRID 生成 EXCEL 报表TStream从盒子上下载了一个别人做的单元文件,可以用来让 DBGRID 生成 EXCE 报 表可是公司内部由于有多个门店,也就是我需要分别连接这些服务器然后通 过这个单元生成一个 EXCEL XL 文件,里面会有多个 sheet,代表各个门店的数 据sheet 的名字会以门店名字为主现在我将这个单元修改了一下,已经可以 实现如上效果,大致原理就是通过 checklistbox这个控件取出所有门店信息,可 以勾选。

      点击按钮,自动取出checklistbox控件被勾选门店的 IP 地址并进行逐个 连接,然后查询并显示 DBGRID 之后全部写入 EXCEL可是问题来了,当某个店数据超过 EXCEI 的限制:65536 行时,如何修改可 以使其自动新增一个 SHEE ,T并将多余的数据插入另一页面?而且不能影响后续的其他门店数据跑取 请高手们抽个空,帮忙看看改一改函数有点乱请大家不要笑话函数使用方式:DBGridToExcel(dbgrid1,nil);函数内容:typefunction DBGridToExcel2(dgrSource: TDBGrid; UpAniInfo: TUpAniInfoProc = nil): Integer;function DBGridToExcel(dgrSource: TDBGrid; UpAniInfo: TUpAniInfoProc): Integer;const //从 DBGrid 导出到 Excel(2005.8.23 改进至可以导入几乎无限的数 据)//Excel 每 Sheet 最大行数MAX_VAR_ONCE = 65535; 一// 次导出的条数var // 返回导出记录条数MyExcel, varCells: Variant;MySheet, MyCells, Cell1, Cell2, Range: OleVariant; iRow, iCol, iSheetIdx, iVarCount, iCurRow: integer; CurPos: TBookmark;i:integer; MAX_SHEET_ROWS:integer; begindgrSource.DataSource.DataSet.DisableControls; dgrSource.DataSource.DataSet.First;MyExcel := CreateOleObject('Excel.Application'); MyExcel.WorkBooks.Add;9 / 12MyExcel.Visible := False;beginif dgrSource.DataSource.DataSet.RecordCount <= MAX_VAR_ONCE theniVarCount :elsedgrSource.DataSource.DataSet.RecordCount=iVarCount :=MAX_VAR_ONCE;varCells := VarArrayCreate([1, iVarCount,1,dgrSource.FieldCount], varVariant); end;iSheetIdx := 1;iRow := 0;Result := 0;//这里是循环从 checklistbox 取门店 IP 进行连接for i:=0 to sqltoexcel.clb1.Items.Count-1 doif sqltoexcel.clb1.Checked[i] thenbegin sqltoexcel.qrycon.Locate('sto_name',sqltoexcel.clb1.Items.Strings[i],[loCaseInsensitive]);if sqltoexcel.qrycon.fieldbyname('sto_serverip').AsString<>'' thenbeginwith sqltoexcel do begin query1.Close;con1.Connected:=false;con1.ConnectionString:='Provider=SQLOLEDB.1;Password=123456;'; con1.ConnectionString:=con1.ConnectionString+'Persist Security Info=True;'; con1.ConnectionString:=con1.ConnectionString+'User ID=sa;InitialCatalog=test;';con1.ConnectionString:=con1.ConnectionString+'Data Source='+qrycon.fieldbyname('sto_serverip').AsString;//导入 SQL 语句query1.Close; query1.SQL.Clear;memo1.Lines.SaveToFile('C:\1234.txt');query1.SQL.LoadFromFile('c:\1234.txt'); query1.Open;end; dgrSource.DataSource.DataSet.First;// 新增一个 Sheetif iSheetIdx <= MyExcel.WorkBooks[1].WorkSheets.Count then MySheet := MyExcel.WorkBooks[1].WorkSheets[iSheetIdx] elseMySheet := MyExcel.WorkBooks[1].WorkSheets.Add(NULL, MySheet);// 加在后面// 设置名字if length(sqltoexcel.qrycon.fieldbyname('sto_name').AsString)>16 thenMyExcel.workbooks[1].WorkSheets[iSheetIdx].name:=copy(sqltoexcel.qrycon.fieldbyname('sto_name').As String,16,length(sqltoexcel.qrycon.fieldbyname('sto_name').AsString)-15) elseMyExcel.workbooks[1].WorkSheets[iSheetIdx].name:=sqltoexcel.qrycon.fieldbyn ame('sto_name').AsString;MyCells := MySheet.Cells; Inc(iSheetIdx);iRow := 1;for iCol := 1 to dgrSource.FieldCount do beginMySheet.Cells[1, iCol] := dgrS。

      点击阅读更多内容
      关于金锄头网 - 版权申诉 - 免责声明 - 诚邀英才 - 联系我们
      手机版 | 川公网安备 51140202000112号 | 经营许可证(蜀ICP备13022795号)
      ©2008-2016 by Sichuan Goldhoe Inc. All Rights Reserved.