导入Excel中的设定列宽和自动换行问题 (50分)

  • 主题发起人 主题发起人 zx_long
  • 开始时间 开始时间
Z

zx_long

Unregistered / Unconfirmed
GUEST, unregistred user!
导入Excel时,用
ExcelApp.ActiveSheet.Columns[1].ColumnsWidth := 5;
设定列宽,提示“自动对象不支持该操作”
请问错在哪里,应该如何写?
列宽设定后,我要让这一列的数据,自动换行,如何实现?
 
应该没问题的?
这是从俺的一个EXCEL类中拉出来的:
function TMyExcelObject.SetExcelColumnWidth2(Excel: Variant; ColumnsCount, ColumnsWidth: integer): Boolean; //设置列宽2
var
iFor: integer;
begin
// 设置指定列的宽度(单位:字符个数):
Excel.ActiveSheet.Columns[ColumnsCount].ColumnsWidth := ColumnsWidth;
end;
 
Sheet.Columns.AutoFit;//自动
 
应该是没什么问题的呀!你的代码没有问题,是不是其他什么地方的错误??
参照一下下面的代码吧!
procedure TTestForm.ChangeColumn;
var
i:integer;
ColumnRange:Variant;
Range:Variant;
begin
ColumnRange:=XLApp.WorkBooks[1].WorkSheets['Delphi Data'].Columns;
Range:=XLApp.WorkBooks[1].WorkSheets['Delphi Data'].Range['A1:J10'];
Range.Borders.LineStyle:=xlContinuous;
for i:=1 to 10 do
begin
ColumnRange.Columns.ColumnWidth:=6;
ColumnRange.Columns.Font.Bold:=True;
ColumnRange.Columns.Font.Color:=clBlue;
end;
end;
 
excel application --> workbooks(workbook) --> worksheets(worksheet)
正确的顺序应该是这样的吧,所以把你的代码改一下:
ExcelApp.workbooks[m].workSheets[n].Columns[1].ColumnsWidth := 5;
 
zyxxyz说得没错。我一直这么用N年了。
 
问题解决了。是我自己太粗心。谢谢大家。
不过jshyh和zyxxyz的说法我不敢苟同。我认为wooksheets是独立与wookbooks的对象。
我一直以来都是直接写成ExcelApp.ActiveSheet,
而不是写成ExcelApp.workbooks[m].workSheets。并不见有错误。
 
话不能这么说,当你只用一个sheet的时候,应该是可以这么写,
但是,如果同时要操作n个sheet的时候呢,你这个ActiveSheet
到底是属于哪个worksheet的呢?!
 
>>我认为wooksheets是独立与wookbooks的对象
恕我孤陋寡闻,
请问zx_long,你能够在不打开workbooks的情况下,创建sheets吗?!
如果能实现,请贴出代码。
 
当然不能在没有WorkBooks的情况下,创建Sheets。
但完全可以用ExcelApp.workSheets[m]来操作Sheet,
而不是用ExcelApp.workbooks[m].workSheets来操作Sheet.
 
谢谢zyxxyz的指点.我觉得你说的挺对的.
其实写成ExcelApp.workSheets[m]只不过是操作的是当前的WorkBook的WorkSheets[m]
 
有没有人给我解决一下第二个问题?
 
这个简单 --
MyWorkBook.worksheets[1].cells[1,1].value :=
'11' + #13#10 + '22' + #13#10 + '33';

测试过的
 
问题的关键在于我要用户自定义列的宽度。
而cell中的数据又是从数据库中取得的,长度不确定。
我想用Excel的功能实现。
 
range.wraptext := True;
 
审题不仔细,:)
再来一段:
ExcelApp := CreateOleObject('Excel.Application');
ExcelApp.visible := true;
MyworkBook := CreateOleObject('Excel.Sheet');

MyWorkBook.worksheets[1].columns['A'].columnwidth := 10;
MyWorkBook.worksheets[1].range['A1'].value :=
'aa12345678901234567890';
MyWorkBook.worksheets[1].range['A1'].WrapText := true;
MyworkBook.saveas('c:/test2.xls');
MyWorkBook.close;
ExcelApp.quit;
ExcelApp := Unassigned;
 
多人接受答案了。
 
后退
顶部