Excel操縱問題(30分)

S

saga

Unregistered / Unconfirmed
GUEST, unregistred user!
请问我要copy一个excel文档的一个sheet的内容到一个字符串中
应该如何操作呢?主要是如何确定一个sheet中的cell[x,y]的范围
是多少?以及如何确定sheet的名称?
 
首先
Excel.ActiveSheet.Cells.Select;
Excel.ActiveSheet.Selection.Copy;
然后
读去剪辑板中得内容。
 
谢谢楼上的。但是这种做法有点浪费空间。毕竟要存到数据库里
我想是这样的,能否确定出cell的x y,然后遍历整个sheet。把
内容为空的cell去掉,只留下有用的信息。
 
用DDE如何?
 
1.我想你应该是一个cell一个cell的读出字符串,然后再组合到你的字符串中。一个
sheet中的cell太多了,我想“一个sheet的内容到一个字符串中”有点困难
c++ builder 代码
e.g.
//打开指定的文件
ExcelApplication1->Workbooks->Open(sName);
//不显示警告消息
ExcelApplication1->Set_DisplayAlerts(0,false);
//
ExcelWorkbook1->ConnectTo(ExcelApplication1->Workbooks->get_Item(1));
// 连接sheet2(第2个sheet)
ExcelWorksheet2->ConnectTo(ExcelWorkbook1->Worksheets->get_Item(2));

//得到指定行列的内容
RangePtr m_RangeTmp =(RangePtr)ExcelWorksheet2->Cells->get_Item((Variant)1,(Variant)1);
Variant tNumber = m_RangeTmp->get_Value();
2.你知道x,y,就应该知道范围,因为x,y是sheet中的行和列
3.你可以先用workbook得到这个文档有多少个sheet,然后用worksheet就可以依次得到
他们的name
 
可以得到sheet的范围(用OLE方式打开Excel表并对其操作):
Maxc :=ExlApp.WorkSheets[1].UsedRange.Columns.Count; //列宽
Maxr :=ExlApp.WorkSheets[1].UsedRange.Rows.Count; //行宽
如何确定名称是什么意思?我只知道如何打开指定的工作表:
ExcelApp.Worksheets[2].activate; //打开第2个工作表
ExcelApp.WorkSheets['第四章'].activate; //打开名为第四章的工作表
 
procedure TfmMain.mnFormatSheetHideClick(Sender: TObject);
var
Sheet:variant;
begin
Sheet:=Excel.ActiveSheet;
Sheet.Visible:=false;
RefreshInfo;
end;

procedure TfmMain.mnFormatSheetShowClick(Sender: TObject);
var
book:variant;
i:integer;
SheetName:string;
begin
book:=Excel.ActiveWorkBook;
if VarIsEmpty(book)then exit;
fmList:=TfmList.Create(Application);
fmList.Caption:='Select hidden sheets';
for i:=1 to book.Sheets.Count do begin
if book.Sheets.Visible=false
then fmList.ListBox.Items.Add(book.Sheets.Name);
end;
if fmList.ListBox.Items.Count>0 then begin
if fmList.ShowModal=mrOk then begin
for i:=0 to fmList.ListBox.Items.Count-1 do begin
if fmList.ListBox.Selected then begin
SheetName:=fmList.ListBox.Items;
book.Sheets[SheetName].Visible:=true;
end;
end;
end;
end else showmessage('Hidden sheets not found');
fmList.Free;
RefreshInfo;
end;

procedure TfmMain.mnFormatSheetRenameClick(Sender: TObject);
var
Sheet:variant;
SheetName:string;
idx:integer;
begin
Sheet:=Excel.ActiveSheet;
SheetName:=Sheet.Name;
idx:=Sheet.Index;
if InputQuery('Rename Sheet',format('Sheet(%d) Name',[idx]),SheetName)
then Sheet.Name:=SheetName;
RefreshInfo;
end;

留下你的qq和mail
 
謝謝樓上幾位老人家
我的qq 458309 msn sagaever#hotmail.com
mail:javabase#963.net
 
顶部