我想将所有String网格数据保存到.xls文件中。我找到了一个似乎没问题的解决方案,但缺少第一个固定行(列标题)。我怎么能保存它?另一件事是可以将col宽度设置为等于我的String网格吗?
非常感谢任何帮助。
procedure SaveToXls;
var
lXls, lWb, lRange: OLEVariant;
lArrData: Variant;
lRowCount, lColCount, I, J: Integer;
begin
lRowCount := stGrid.RowCount;
lColCount := stGrid.ColCount;
lArrData := VarArrayCreate([1, lRowCount, 1, lColCount], varVariant);
for i := 1 to lRowCount do
for j := 1 to lColCount do
lArrData[i, j] := stGrid.Cells[j-1, i-1];
lXls := CreateOLEObject('Excel.Application');
lWb := lXls.Workbooks.Add;
lRange := lWb.WorkSheets[1].Range[lWb.WorkSheets[1].Cells[1, 1],
lWb.WorkSheets[1].Cells[lRowCount, lColCount]];
lRange.Value := lArrData;
lXls.Visible := True;
end;
答案 0 :(得分:1)
对我来说代码有效。要设置列宽,假设使用可变字体,以下工作(Excel宽度是字符宽度的倍数' 0'对于可变字体):
function TForm1.CalcWidth: integer;
var
iWidthZero : integer;
begin
// assume variable font
iWidthZero := stGrid.Canvas.TextWidth('0');
Result := (stGrid.DefaultColWidth + iWidthZero - 1) div iWidthZero;
end;
并添加到您显示的功能
lRange.ColumnWidth := CalcWidth;
在底部。
显然,如果您愿意,类似的方法可以逐列工作,但您必须相应地设置范围。