前两篇研究了一下在连接数据库后,TStringGrid控件数据的填充。还有将TStringGrid的填充数据复制到剪贴板,再通过剪贴板把数据粘贴到其它地方。
现在,再来研究一下,如何把当前TStringGrid控件中的数据整表,按照所选路径保存成Excel文件。
一、环境
Windows10
RAD Studio 10 Seattle
SQL Server 2014 Management Studio
二、相关控件
还是继续用之前两篇创建的窗体展开,添加一个Button2按钮(用作导出的触发)和一个SaveDialog1(文件导出路径的选择)
三、创建生成Excel的调用过程StringGridToExcel
可以概括为三个步骤:创建Excel文件——数据填充到excel——Excel保存
1、用Excel本身的文件命名、选径保存
//StringGridToExcel的过程,像这种公共的、会多处使用到的方法,可以将它们写到一起去,哪个窗体要用的话在uses处添加引用
//记得要在窗体头部相应地生成procedure StringGridToExcel(StringGrid1: TStringGrid);
procedure TForm1.StringGridToExcel(StringGrid1: TStringGrid); // 传参参数为TStringGrid,既显示到StringGrid1的数据集
var
i, j: integer;
filename: string;
excel: OleVariant;
savedialog: tsavedialog;
begin
screen.Cursor := crHourGlass; //使鼠标指针形状为沙漏状。(可以用此表示程序正在执行中)
try
excel := CreateOleObject('Excel.Application'); //需要引用ComObj,才能使用OLE创建Excel文件
excel.workbooks.add; //创建一个工作簿
except
screen.cursor := crDefault; //使鼠标指针恢复成箭头状态
showmessage('无法调用Excel!');
exit;
end;
//将StringGrid1中的数据循环填充到excel
///就和之前的StringGrid填充数据集是一致的,只不过把数据来源ADOQuery1换成StringGrid1,StringGrid1.Cells换成了excel.Cells
for i := 0 to StringGrid1.RowCount - 1 do
begin
for j := 0 to StringGrid1.ColCount - 1 do
begin
excel.Cells[i + 1, j + 1] := StringGrid1.Cells[j, i];
end;
end;
try
//将 excel的工作簿按路径(filename)保存
excel.ActiveWorkbook.SaveAs(filename)