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循环就能访问所有的了。
展开
 我来答
tidtoybd
2011-07-14 · TA获得超过105个赞
知道小有建树答主
回答量:135
采纳率:0%
帮助的人:182万
展开全部
我不会Delphi 但是熟悉 Excel VBA, 你可以直接调用 Sheets.Range("区域名称") 来操作
因为在VBA中可以这样写:
(打比方Sheet1中有个区域叫做 AAA)
SUB TRYIT
SHEETS("SHEET1").RANGE("AAA").SELECT
END SUB

此时将选中工作表Sheet1中命名为AAA的区域

据此,你可以直接调用RANGE
licob_1
2011-07-14 · 超过22用户采纳过TA的回答
知道答主
回答量:109
采纳率:0%
帮助的人:60.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;
已赞过 已踩过<
你对这个回答的评价是?
评论 收起
tiadimh
2011-07-14 · 超过32用户采纳过TA的回答
知道答主
回答量:136
采纳率:0%
帮助的人:71.3万
展开全部
for i:=1 to n do
if EclApp.WorkSheets[i].name:=''
eclApp.WorkSheets[ni].Activate;
追问
不是sheet的名字,而是单元格选定区域的名字,不要答非所问阿。。。。。。
已赞过 已踩过<
你对这个回答的评价是?
评论 收起
fit大虾
2011-07-16 · TA获得超过564个赞
知道小有建树答主
回答量:551
采纳率:50%
帮助的人:254万
展开全部
我觉得只能够知道了名字才能操作。如
Excelworksheet1.Range['XXX'].Font.Size:='10'; //指定区域字体大小
已赞过 已踩过<
你对这个回答的评价是?
评论 收起
钭松区学海
2020-03-15 · TA获得超过3845个赞
知道大有可为答主
回答量:3104
采纳率:31%
帮助的人:270万
展开全部
excel中可以选定一些单元格,然后为这个区域定义一个名称。现在已知一个excel文件,有多个sheet,这些sheet中有几个命名了的区域,这些命名域有几个,在哪里,什么名称事先都不知道。。。我要用delphi打开这个文件,用程序自动找出里面总共有几个命名域,并且一一定位进行赋值,要怎么实现,请高手帮忙~~
已赞过 已踩过<
你对这个回答的评价是?
评论 收起
收起 更多回答(3)
推荐律师服务: 若未解决您的问题,请您详细描述您的问题,通过百度律临进行免费专业咨询

为你推荐:

下载百度知道APP,抢鲜体验
使用百度知道APP,立即抢鲜体验。你的手机镜头里或许有别人想知道的答案。
扫描二维码下载
×

类别

我们会通过消息、邮箱等方式尽快将举报结果通知您。

说明

0/200

提交
取消

辅 助

模 式