dephi TdxSpreadSheet,TdxSpreadSheetReportDesigner ,TdxSpreadSheetFormulaBar "表格三兄弟"组件的运用
组件明细:

TdxSpreadSheet基本上还原了EXCEL的基本功能,用户可以像EXCEL一样正常操作这个控件,比如控件下ctrl+1也能调出单元格属性设置.
另外,就算用户电脑上没有安装EXCEL,程序依然能够正常运行.
简单编辑时用着还行,代码操作的太复杂的话就算了,不建议使用.
dxSpreadSheet1.SheetCount : 工作表总数
dxSpreadSheet1.AddSheet('新工作表'): 插入新工作表,名称为'新工作表'
dxSpreadSheet1.Sheets[0].Caption: 第一个工作表的名称
dxSpreadSheet1.ActiveSheet.caption: 正在编辑(激活)的工作表的名称.
dxSpreadSheet1.Sheets[1].Active:=True 激活第二个工作表(前提是有第二个表,否则出错)
dxSpreadSheet1.ActiveSheetIndex:= 1 作用和上一条相同.
//根据字符串,返回工作表对象,然后激活它.
var str:string; mySheet:TdxSpreadSheetCustomView; begin str:='工作表名'; mySheet := dxSpreadSheet1.GetSheetByName(str); //容错代码自己加 mySheet.Active:=True; end;
//注意,如果你在最后一行往下的位置,或者最后一列往右的位置,编辑了,然后又清空掉的话,最后一行或者最后一列的位置,都会以这个单元格为准,空值和不存在,是两个概念. dxSpreadSheet1.ActiveSheetAsTable.Rows.Count 表格的行数 dxSpreadSheet1.ActiveSheetAsTable.Columns.Count 表格的列数
str:= dxSpreadSheet1.ActiveSheetAsTable.Cell[1,1].AsString; 获取B2单元格的值. ( A1坐标为 [0,0] ),和取数据库数据一样,要注意数据类型.
//无论是读取值,还是写入值,都要首先判断单元格是否为空,如果为空的话,读写都会出问题.
//读取值 procedure TForm1.dxBarButton1Click(Sender: TObject); var Cell: TdxSpreadSheetCell; begin Cell := dxSpreadSheet1.ActiveSheetAsTable.Cells[0, 1]; if Cell <> nil then ShowMessage(Cell.AsString) else ShowMessage('B2无内容'); end;
// 写入值 procedure TForm1.dxBarButton2Click(Sender: TObject); var newCell: TdxSpreadSheetCell; begin newCell := dxSpreadSheet1.ActiveSheetAsTable.Cells[1, 1]; if newCell = nil then newCell := dxSpreadSheet1.ActiveSheetAsTable.CreateCell(1, 1); newCell.AsString := '又是新的一天'; end;
2024-04-17 更新:
TdxSpreadSheetFormulaBar 控件的应用
这个超简单,设置关联的表就可以了.


TdxSpreadSheetReportDesigner 控件的运用.
这个控件是用来设置报表的.使用起来有点麻烦,请大家按步骤先走一遍,其他的再慢慢研究
1.这玩意需要自己创建一个模板(EXCEL文件),并且有严格的格式要求,我先给大家打个样

设置完成后,把模板(就一普通xlsx/xls后缀的EXCEL文件)保存起来备用.
然后是在delphi中插入TdxSpreadSheetReportDesigner 控件,给它关联一个数据集,然后它的宽和高都设置为0,且不可见即可

整体设置图如下:

以下是"载入数据"按钮的代码:
procedure TForm1.Button1Click(Sender: TObject); begin dxSpreadSheetReportDesigner1.LoadFromFile('..\..\报表模板.xlsx'); //载入模板文件.同级目录是LoadFromFile('报表模板.xlsx'),我这里是不同级的 dxSpreadSheet1.ClearAll; //清空表格 dxSpreadSheetReportDesigner1.Build(dxSpreadSheet1); //输出到表格 end;
效果如下:

说说打印功能.
我们需要手动加入一个 dxPrnDev 单元,以使用它的方法来获取打印机列表
uses dxPrnDev; procedure TForm1.FormCreate(Sender: TObject); begin cxComboBox1.Text :='请选择一部打印机' ; cxComboBox1.Properties.Items.Clear ; cxComboBox1.Properties.Items :=dxPrintDevice.Printers; //获取打印机列表 end;
然后是打印功能.打印需要添加一个 TdxComponentPrinter 控件.添加之后,先什么都别管.在图标上右键,来创建一个 TdxSpreadSheetReportLnk 类



然后回过头来设置一下TdxComponentPrinter控件的CurrentLink属性为刚刚创建的 dxComponentPrinter1Link1,现在你的打印工作已经可以正常操作了.

打印功能的核心代码也简单:
procedure TForm1.Button2Click(Sender: TObject); begin if cxComboBox1.Text = '请选择一部打印机' then begin Application.MessageBox('请选择一部打印机', '', MB_OK); Exit; end; dxPrintDevice.PrinterIndex := cxcombobox1.ItemIndex; //设置打印机索引 dxComponentPrinter1Link1.Preview(); //打印预览 // dxComponentPrinter1Link1.Print(true); //显示打印机选择界面 // dxComponentPrinter1Link1.Print(false); //文档上说这句代码是直接打印,无交互.但我实际上操作时是有交互的. end;
预览效果如图:


浙公网安备 33010602011771号