如何遍历Excel中得分页符 ( 积分: 100 )

  • 主题发起人 主题发起人 sunstone
  • 开始时间 开始时间
S

sunstone

Unregistered / Unconfirmed
GUEST, unregistred user!
我在使用函数breakcount:= excelworksheet1.HPageBreaks.count;时能取得水平分页符
的个数,但用循环 for i:=1 to breakcount do
excelworksheet1.hpagebreaks.Item.Location.row;
却出现来自ole系统提示--‘索引错误’请大侠指点。

谢谢!
QQ:15652021 13596106565
sunstone@uufax.com
 
我在使用函数breakcount:= excelworksheet1.HPageBreaks.count;时能取得水平分页符
的个数,但用循环 for i:=1 to breakcount do
excelworksheet1.hpagebreaks.Item.Location.row;
却出现来自ole系统提示--‘索引错误’请大侠指点。

谢谢!
QQ:15652021 13596106565
sunstone@uufax.com
 
// 打开文件
procedure TForm1.Button7Click(Sender: TObject);
begin
xlApp.Connect;
xlBook.ConnectTo(xlApp.Workbooks.Open('E:/book1.xls',NULL,false,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,0));
xlSheet.ConnectTo(xlBook.Sheets[1] as _WorkSheet);
xlApp.Visible[0] := True;
end;

// 获得分页符信息
procedure TForm1.Button9Click(Sender: TObject);
var
Hpb,Vpb : integer;
i,j : integer;
begin
Hpb := xlSheet.HPageBreaks.Count;
Vpb := xlSheet.VPageBreaks.Count;

listbox1.Items.Clear;
listbox1.Items.Add('HPageBreaks='+inttostr(Hpb));
listbox1.Items.Add('VPageBreaks='+inttostr(vpb));

for i := 1 to Hpb do
begin
j := xlSheet.HPageBreaks.Item.Location.Row;
listbox1.Items.Add('vrow='+inttostr(j));
end;
end;

在编辑状态下插入分页符,如果该行没有东西,Excel将忽略该分页符.
先试着在有东西的地方进行分页,看看代码对不对.
 
经过本人测试,包括手工录入的文件只要设置了页面属性,或是合并了单元格,甚至改变
默认字体大小,都将报出索引错误。也不知道微软编写的机理,希望各位一同探讨,再次感谢
各位的帮助。
 
http://www.delphibbs.com/delphibbs/dispq.asp?lid=781699
大家看看,也不知道提问者是怎么解决的?
我碰到的问题和他一样!
 
1、分页符只有在他的后一页有可打印内容的时候才起作用。例如你在一个空白页面上插入一个分页符,你查看 HPageBreaks.Count 一定是 0,你在分页符所在前一页输入内容,他还是 0,只有在分页符后有可打印内容时这个分页符才算数。
2、只要把 excelworksheet1.hpagebreaks.Item.Location.row 这句套在循环里面或在有 Item 的地方都加一个判断就不会出错。
 
为什么会出现索引错误呢
 
不出索引错误还能出什么错误——本来没有可打印内容,一页也打不了,你却认为加了 3 个分页符就应该打 4 页,当然越界。
 
不对呀,命名xlSheet.HPageBreaks.Count得到了3个分页符号,为什么 xlSheet.HPageBreaks.Item[2].都出现索引错误
 
后退
顶部