Unigui的TUniDBGrid導出到Excel


ehr,wms,mes,兩化融合貫標

http://360mes.cn
http://www.360mes.cn
http://ks.360mes.cn
http://tc.360mes.cn
http://cs.360mes.cn
http://jy.360mes.cn
http://sz.360mes.cn
http://tc.360mes.cn
http://ha.360mes.cn
http://ls.360mes.cn

TUniDBGrid自帶的導出功能,如果grid進行了分頁,只能導出當前顯示的頁的內容。本文利用Tms FlexCel,可以導出整個grid的內容,與是否分頁沒有關系http://ehr.kopsoft.cn?url=TUniFrame_hr_User

1,利用tms 的FlexCel

2,調用方法UniSession.SendFile(a.DataSetToXls(undbgrd_user,'人員明細'),'人員明細.xls');

3,主要功能:導出Excel,加入Excel的標題,根據grid的標題為excel增加首行標題,設置自動適應列寬,首列增加為序號列

 免費人力資源管理軟件,免費Mes系統,免費倉庫管理軟件WMS

function TUnit_DataExport.DataSetToXls(DbGrid:TUniDBGrid;Tile:string): string;
var
xls: TXlsFile;
Row: integer;
Fmt: TFlxFormat;
DateXF, DateTimeXF,FontSizeTitleXF,FontSizeDataXF,FontSizePageTitleXF: integer;
file_name: string;
ds: TDataSet;
Alignment:THFlxAlignment;
ColExcel,ColDbgrid:Integer;
begin
ds:=DbGrid.DataSource.DataSet;

xls := TXlsFile.Create(1, TExcelFileFormat.v2003, true);
try
//excel標題格式
Fmt := xls.GetDefaultFormat;
Fmt.Font.Size20:=280;
Fmt.Font.Style:=[TFlxFontStyles.Bold];
Fmt.HAlignment:=THFlxAlignment.center;
FontSizeTitleXF := xls.AddFormat(Fmt);


//excel頁標題格式
Fmt := xls.GetDefaultFormat;
Fmt.Font.Size20 :=360;
Fmt.Font.Style:=[TFlxFontStyles.Bold];
Fmt.HAlignment:=THFlxAlignment.center;
FontSizePageTitleXF := xls.AddFormat(Fmt);


xls.SheetName:=Tile;

//第一行進行合並,作為頁面標題
xls.MergeCells(1,1,1,DbGrid.Columns.Count+1);
xls.SetCellValue(1, 1, Tile,FontSizePageTitleXF);

//Now loop over all records and send them to the file.
ds.First;
Row := 2;

xls.SetCellValue(Row, 1, '序號',FontSizeTitleXF);
xls.SetColWidthInternal(ColExcel,40);

//第二行根據grid標題寫入excel標題
for ColDbgrid := 0 to DbGrid.Columns.Count-1 do
begin
ColExcel:=ColDbgrid+2;
xls.SetCellValue(Row, ColExcel, DbGrid.Columns.Items[ColDbgrid].Title.Caption,FontSizeTitleXF);
xls.SetColWidthInternal(ColExcel,DbGrid.Columns.Items[ColDbgrid].Width*35);
end;

//第三行開始數據寫入
Row := 3;
while not ds.Eof do
begin
for ColDbgrid := 0 to DbGrid.Columns.Count-1 do
begin

//獲取grid的對齊方式
if DbGrid.Columns[ColDbgrid].Alignment=TAlignment.taLeftJustify then
Alignment:=THFlxAlignment.left
else if DbGrid.Columns[ColDbgrid].Alignment=TAlignment.taCenter then
Alignment:=THFlxAlignment.center
else if DbGrid.Columns[ColDbgrid].Alignment=TAlignment.taRightJustify then
Alignment:=THFlxAlignment.right
else
Alignment:=THFlxAlignment.center;


//設置日期、普通數據的單元格格式
//長日期格式
Fmt := xls.GetDefaultFormat;
Fmt.Format := 'yyyy-mm-dd hh:MM:ss';
Fmt.Font.Size20:=240;
Fmt.HAlignment:=Alignment;
DateTimeXF := xls.AddFormat(Fmt);

//短日期格式
Fmt := xls.GetDefaultFormat;
Fmt.Format := 'yyyy-mm-dd';
Fmt.Font.Size20:=240;
Fmt.HAlignment:=Alignment;
DateXF := xls.AddFormat(Fmt);


//excel數據格式
Fmt := xls.GetDefaultFormat;
Fmt.Font.Size20 :=240;
Fmt.HAlignment:=Alignment;
FontSizeDataXF := xls.AddFormat(Fmt);

//第一列寫入序號
if ColDbgrid=0 then
begin
//excel數據格式
Fmt := xls.GetDefaultFormat;
Fmt.Font.Size20 :=240;
Fmt.HAlignment:=THFlxAlignment.center;

xls.SetCellValue(Row, 1, (row-2),xls.AddFormat(Fmt));
end;


//從exce第二列開始寫入數據(第一列被手動寫入了序號)
ColExcel:=ColDbgrid+2;
//grid列沒有綁定字段的,則該列寫入空字符
if ds.FieldList.IndexOf(DbGrid.Columns.Items[ColDbgrid].FieldName)=-1 then
begin
xls.SetCellValue(Row, ColExcel, '',FontSizeDataXF);

Continue;
end;

//根據字段的三種類型進行設置,長時間格式,短時間格式,其他格式,寫入數據
case ds.FieldByName(DbGrid.Columns.Items[ColDbgrid].FieldName).DataType of
TFieldType.ftDateTime:
begin
if ds.FieldByName(DbGrid.Columns.Items[ColDbgrid].FieldName).IsNull then
xls.SetCellValue(Row, ColExcel, '')
else
xls.SetCellValue(Row, ColExcel, ds.FieldByName(DbGrid.Columns.Items[ColDbgrid].FieldName).AsDateTime, DateTimeXF);

xls.SetColWidthInternal(ColExcel,DbGrid.Columns.Items[ColDbgrid].Width*50);
end;

TFieldType.ftDate:
begin
if ds.FieldByName(DbGrid.Columns.Items[ColDbgrid].FieldName).IsNull then
xls.SetCellValue(Row, ColExcel, '')
else
xls.SetCellValue(Row, ColExcel, ds.FieldByName(DbGrid.Columns.Items[ColDbgrid].FieldName).AsDateTime, DateXF);

xls.SetColWidthInternal(ColExcel,DbGrid.Columns.Items[ColDbgrid].Width*50);
end;

else
begin
xls.SetCellValue(Row, ColExcel, ds.FieldByName(DbGrid.Columns.Items[ColDbgrid].FieldName).Value,FontSizeDataXF);
end;
end;

end;

ds.Next;

Inc(Row);
end;
//寫入公式
//xls.SetCellValue(row+1,1,xls.RecalcExpression('=Sum(A3:A'+IntToStr(row)+')',False),FontSizePageTitleXF);

//設置各列的自動最佳列寬
xls.AutofitCol(1,DbGrid.Columns.Count+1,False,1.2);

file_name:='temp\'+formatdatetime('yyyymmddhhMMss',now())+'.xls';
xls.Save(file_name);
Result:=file_name;
finally
xls.Free;
end;


end;


免責聲明!

本站轉載的文章為個人學習借鑒使用,本站對版權不負任何法律責任。如果侵犯了您的隱私權益,請聯系本站郵箱yoyou2525@163.com刪除。



 
粵ICP備18138465號   © 2018-2025 CODEPRJ.COM