首页
学习
活动
专区
工具
TVP
发布
社区首页 >问答首页 >从delphi自定义导入的excel文件

从delphi自定义导入的excel文件
EN

Stack Overflow用户
提问于 2018-07-30 09:34:00
回答 2查看 1.4K关注 0票数 1

我写了一段代码从dbgrid中导出一个excel文件。下面是以下代码:

代码语言:javascript
复制
    var i, x:integer;
sfile:string;
begin
XlApp:=createoleobject('Excel.Application');
XlBook:=XlApp.WorkBooks.Add;
XlSheet:= XlBook.worksheets.add;
for i:=0 to dbgrid1.fieldcount-1 do begin
xlsheet.cells[1,i+1].value:=dbgrid1.columns[i].title.caption;
end;
zquery1.first;
x:=1;
while not zquery1.eof do begin
xlsheet.cells[x+1,1].value:=x;
for i:=1 to dbgrid1.fieldcount-1 do begin
xlsheet.cells[x+1, i+1].value:=dbgrid1.fields[i].text;
end;
zquery1.next;
inc(x);
end;
xlapp.visible:=true;
end;

它工作得很好,但是桌子太乱了。如何自定义此excel文件,以便每列根据每个数据提供正确的宽度值?谢谢。

EN

回答 2

Stack Overflow用户

发布于 2018-07-31 20:46:41

Excel Range有一个AutoFit方法,它可以在一次调用中为您完成这项工作,并且不需要您尝试计算出需要分配给每一列的宽度。

下面是一个示例(在Delphi 2007中进行了测试),它创建一个二维变量数组,用宽度太大而无法容纳默认Excel单元格的示例文本填充该数组,将该文本分配给Excel范围,并将该范围内的所有单元格自动调整为文本的适当宽度(类似于双击Excel中列之间的分隔符时发生的情况)。您应该能够轻松地将这种方式调整为自动显示文本(以及通过自动化将数据传输到Excel中的速度更快的方式),以使用您的代码。

出于演示目的,我将代码放入TButton.OnClick事件处理程序中。

代码语言:javascript
复制
uses
  ComObj, ActiveX;

procedure TForm3.Button1Click(Sender: TObject);
var
  xls, wb, Range: OLEVariant;
  arrData: Variant;
  RowCount, ColCount, i, j: Integer;
begin
  {create variant array where we'll copy our data}
  RowCount := 10;
  ColCount := 10;
  arrData := VarArrayCreate([1, RowCount, 1, ColCount], varVariant);

  {fill array}
  for i := 1 to RowCount do
    for j := 1 to ColCount do
      arrData[i, j] := Format('This is test text #%d-%d', [i, j]);

  {initialize an instance of Excel}
  xls := CreateOLEObject('Excel.Application');

  {create workbook}
  wb := xls.Workbooks.Add;

  {retrieve a range where data must be placed}
  Range := wb.WorkSheets[1].Range[wb.WorkSheets[1].Cells[1, 1],
                                  wb.WorkSheets[1].Cells[RowCount, ColCount]];

  { copy data from the array into an Excel Range, and then use AutoFit to size them }
  Range.Value := arrData;
  Range.Columns.AutoFit;

  {show Excel with our data}
  xls.Visible := True;
end;
票数 2
EN

Stack Overflow用户

发布于 2018-07-30 10:04:08

您可以使用Columns[i].ColumnWidth设置每列的宽度。

代码语言:javascript
复制
var
  ColRange: Variant;

ColRange := xlsheet.Columns;
ColRange.Columns[1].ColumnWidth := 12;
票数 0
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/51585984

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档