delphi操作excel,如何定位已经命名的区域?
excel中可以选定一些单元格,然后为这个区域定义一个名称。现在已知一个excel文件,有多个sheet,这些sheet中有几个命名了的区域,这些命名域有几个,在哪里,什...
excel中可以选定一些单元格,然后为这个区域定义一个名称。现在已知一个excel文件,有多个sheet,这些sheet中有几个命名了的区域,这些命名域有几个,在哪里,什么名称事先都不知道。。。我要用delphi打开这个文件,用程序自动找出里面总共有几个命名域,并且一一定位进行赋值,要怎么实现,请高手帮忙~~
我看excel宏代码:excelApp.ActiveWorkBook.Names(1)就是第一个命名域,可是delphi中不行,要怎么办?
用range必须知道命名区域的名称以及所在的sheet,但是问题中我已经说了这些都不知道啊!
我自己研究出来了excelApp.ActiveWorkBook.Names.Item(1)就能获取到第一个命名区域啦!这样for i=1 to excelApp.ActiveWorkBook.Names.Count循环就能访问所有的了。 展开
我看excel宏代码:excelApp.ActiveWorkBook.Names(1)就是第一个命名域,可是delphi中不行,要怎么办?
用range必须知道命名区域的名称以及所在的sheet,但是问题中我已经说了这些都不知道啊!
我自己研究出来了excelApp.ActiveWorkBook.Names.Item(1)就能获取到第一个命名区域啦!这样for i=1 to excelApp.ActiveWorkBook.Names.Count循环就能访问所有的了。 展开
5个回答
展开全部
下面是一个TSringGrid输出到excel的方法:
倒数第二行是你需要的。
try
Excel := CreateOLEObject('Excel.Application');
except
Application.MessageBox('没有发现Excel!', pchar(Application.Title), MB_OK + mb_ICONERROR);
exit;
end;
BeginNum := 2; //起始列
Excel.WorkBooks.Add();
Excel.Cells.Select;
Excel.Selection.Font.Name := '宋体';
Excel.Selection.Font.Size := '9';
cc := DealABC(FieldCount - 1);
Excel.Range['A1', Pchar(cc) + '1'].Select;
Excel.Selection.HorizontalAlignment := xlCenter;
Excel.Selection.VerticalAlignment := xlBottom;
Excel.Selection.WrapText := False;
Excel.Selection.Orientation := 0;
Excel.Selection.AddIndent := False;
Excel.Selection.ShrinkToFit := False;
Excel.Selection.MergeCells := False;
Excel.Selection.Merge;
Excel.Selection.Font.Name := '宋体';
Excel.Selection.Font.Size := 20;
Excel.Selection.Columns.AutoFit;
//输出表头
Excel.Selection.value := TitleStr;
if SourceGrid.RowCount > 1 then //如果记录不为空
begin
//先输出字段名。
k := 0; //记录选中的字段数
m := FieldCount - 1; //总字段数
for j := 0 to m do
begin
col_i := strtoint(fields.Strings[k]);
ExcelABC := Pchar(DealABC(k));
Excel.Range[ExcelABC + IntToStr(BeginNum)].Select;
temStr := SourceGrid.Cells[col_i, 0];
Excel.Selection.Value := temStr;
k := k + 1;
end;
BeginNum := BeginNum + 1; //列+1
//输出字段名完毕.
for row_i := 1 to SourceGrid.RowCount - 1 do
begin
k := 0;
for j := 0 to m do //外部循环在ShowDieldList.Item中的所有项目
begin
col_i := strtoint(fields.Strings[k]);
ExcelABC := PChar(DealABC(k)); //取出当前单元列。
Excel.Range[ExcelABC + IntToStr(BeginNum)].Select;
Excel.Selection.NumberFormatLocal := '@'; //输出为文本模式
Excel.Selection.Value := SourceGrid.Cells[col_i, row_i];
k := k + 1;
end; //在输出数值。
BeginNum := BeginNum + 1;
Application.ProcessMessages();
end;
end;
//EXCEL的最后收尾。
try
Excel.Selection.Borders[xlDiagonalDown].LineStyle := xlNone;
Excel.Selection.Borders[xlDiagonalUp].LineStyle := xlNone;
Excel.Selection.Borders[xlEdgeLeft].LineStyle := xlContinuous;
Excel.Selection.Borders[xlEdgeLeft].Weight := xlThin;
Excel.Selection.Borders[xlEdgeLeft].ColorIndex := xlAutomatic;
Excel.Selection.Borders[xlEdgeTop].LineStyle := xlContinuous;
Excel.Selection.Borders[xlEdgeTop].Weight := xlThin;
Excel.Selection.Borders[xlEdgeTop].ColorIndex := xlAutomatic;
Excel.Selection.Borders[xlEdgeBottom].LineStyle := xlContinuous;
Excel.Selection.Borders[xlEdgeBottom].Weight := xlThin;
Excel.Selection.Borders[xlEdgeBottom].ColorIndex := xlAutomatic;
Excel.Selection.Borders[xlEdgeRight].LineStyle := xlContinuous;
Excel.Selection.Borders[xlEdgeRight].Weight := xlThin;
Excel.Selection.Borders[xlEdgeRight].ColorIndex := xlAutomatic;
except
end;
Excel.Range['A1'].Select;
//收尾完毕。
Excel.Visible := true;
倒数第二行是你需要的。
try
Excel := CreateOLEObject('Excel.Application');
except
Application.MessageBox('没有发现Excel!', pchar(Application.Title), MB_OK + mb_ICONERROR);
exit;
end;
BeginNum := 2; //起始列
Excel.WorkBooks.Add();
Excel.Cells.Select;
Excel.Selection.Font.Name := '宋体';
Excel.Selection.Font.Size := '9';
cc := DealABC(FieldCount - 1);
Excel.Range['A1', Pchar(cc) + '1'].Select;
Excel.Selection.HorizontalAlignment := xlCenter;
Excel.Selection.VerticalAlignment := xlBottom;
Excel.Selection.WrapText := False;
Excel.Selection.Orientation := 0;
Excel.Selection.AddIndent := False;
Excel.Selection.ShrinkToFit := False;
Excel.Selection.MergeCells := False;
Excel.Selection.Merge;
Excel.Selection.Font.Name := '宋体';
Excel.Selection.Font.Size := 20;
Excel.Selection.Columns.AutoFit;
//输出表头
Excel.Selection.value := TitleStr;
if SourceGrid.RowCount > 1 then //如果记录不为空
begin
//先输出字段名。
k := 0; //记录选中的字段数
m := FieldCount - 1; //总字段数
for j := 0 to m do
begin
col_i := strtoint(fields.Strings[k]);
ExcelABC := Pchar(DealABC(k));
Excel.Range[ExcelABC + IntToStr(BeginNum)].Select;
temStr := SourceGrid.Cells[col_i, 0];
Excel.Selection.Value := temStr;
k := k + 1;
end;
BeginNum := BeginNum + 1; //列+1
//输出字段名完毕.
for row_i := 1 to SourceGrid.RowCount - 1 do
begin
k := 0;
for j := 0 to m do //外部循环在ShowDieldList.Item中的所有项目
begin
col_i := strtoint(fields.Strings[k]);
ExcelABC := PChar(DealABC(k)); //取出当前单元列。
Excel.Range[ExcelABC + IntToStr(BeginNum)].Select;
Excel.Selection.NumberFormatLocal := '@'; //输出为文本模式
Excel.Selection.Value := SourceGrid.Cells[col_i, row_i];
k := k + 1;
end; //在输出数值。
BeginNum := BeginNum + 1;
Application.ProcessMessages();
end;
end;
//EXCEL的最后收尾。
try
Excel.Selection.Borders[xlDiagonalDown].LineStyle := xlNone;
Excel.Selection.Borders[xlDiagonalUp].LineStyle := xlNone;
Excel.Selection.Borders[xlEdgeLeft].LineStyle := xlContinuous;
Excel.Selection.Borders[xlEdgeLeft].Weight := xlThin;
Excel.Selection.Borders[xlEdgeLeft].ColorIndex := xlAutomatic;
Excel.Selection.Borders[xlEdgeTop].LineStyle := xlContinuous;
Excel.Selection.Borders[xlEdgeTop].Weight := xlThin;
Excel.Selection.Borders[xlEdgeTop].ColorIndex := xlAutomatic;
Excel.Selection.Borders[xlEdgeBottom].LineStyle := xlContinuous;
Excel.Selection.Borders[xlEdgeBottom].Weight := xlThin;
Excel.Selection.Borders[xlEdgeBottom].ColorIndex := xlAutomatic;
Excel.Selection.Borders[xlEdgeRight].LineStyle := xlContinuous;
Excel.Selection.Borders[xlEdgeRight].Weight := xlThin;
Excel.Selection.Borders[xlEdgeRight].ColorIndex := xlAutomatic;
except
end;
Excel.Range['A1'].Select;
//收尾完毕。
Excel.Visible := true;
已赞过
已踩过<
评论
收起
你对这个回答的评价是?
展开全部
for i:=1 to n do
if EclApp.WorkSheets[i].name:=''
eclApp.WorkSheets[ni].Activate;
if EclApp.WorkSheets[i].name:=''
eclApp.WorkSheets[ni].Activate;
追问
不是sheet的名字,而是单元格选定区域的名字,不要答非所问阿。。。。。。
已赞过
已踩过<
评论
收起
你对这个回答的评价是?
展开全部
我觉得只能够知道了名字才能操作。如
Excelworksheet1.Range['XXX'].Font.Size:='10'; //指定区域字体大小
Excelworksheet1.Range['XXX'].Font.Size:='10'; //指定区域字体大小
已赞过
已踩过<
评论
收起
你对这个回答的评价是?
展开全部
excel中可以选定一些单元格,然后为这个区域定义一个名称。现在已知一个excel文件,有多个sheet,这些sheet中有几个命名了的区域,这些命名域有几个,在哪里,什么名称事先都不知道。。。我要用delphi打开这个文件,用程序自动找出里面总共有几个命名域,并且一一定位进行赋值,要怎么实现,请高手帮忙~~
已赞过
已踩过<
评论
收起
你对这个回答的评价是?
推荐律师服务:
若未解决您的问题,请您详细描述您的问题,通过百度律临进行免费专业咨询