此文背景:
最近,我想通过Interface完全控制数据排版格式导出到Excel。不愿意使用Variant是因为Variant操作慢,编码时需清晰Excel对象层次结构,调试不方便。
摸索过程:
基本的操作简单,我搞不定的就是PageSetup与选定一列或一行。别看下面代码简单,我可是花了一天半时间看,搜,问(太菜,惭愧中...)。
此文目的:
数据共享并期望数据共享。
procedure AutoExcelByIntf;
var
R: Range;
LCID: Integer;
// 这才是正确的类型,否则怎么也找不到PageSetup
B: _Workbook;
S: _Worksheet;
begin
...
LCID := GetUserDefaultLCID;
B := XlApp.Workbooks.Add(EmptyParam, LCID);
// 两种方法一个样
// S := B.Sheets[1] as _WorkSheet;
S := B.Sheets.Item[1] as _WorkSheet;
// 页面设置
S.PageSetup.LeftMargin := 150; // 其他不再一一列举
...
// 第一列与第一行文本格式设置
// 设为Text不至于3.1515926535897932384626被截成3.14159265358979
// 注:Excel最多65536行,IV列
// XlApp.Range['A1', 'A65536'].NumberFormat := '@'; // 不能容忍此笨办法
// XlApp.Range['A1', 'IV1'].NumberFormat := '@'; // 虽然可以达到目的
R := XlApp.Range['A1', 'A1'];
R.EntireColumn.NumberFormat := '@';
R.EntireRow.NumberFormat := '@';
...
// 选定一百行与一百列
// R := XlApp.Range['A1', 'CV100']; // 不能容忍此笨办法
// R.Select; // 虽然可以达到目的
R := XlApp.Cells;
R := R.Range_[R.Item[1, 1], R.Item[100, 100]];
R.Select;
end;
谢谢大家砸砖头!:-)