读书人

怎么对EXCEL文件操作

发布时间: 2012-02-08 19:52:21 作者: rapoo

如何对EXCEL文件操作?
现有一个EXCEL文件,内容如下:
a b
1 10 20
2 2 1
3 15 2
4 100 50
如何把这些东西导入BCB中的表格中呢?
也是按照这个格式做,
最好给个例子
谢谢

[解决办法]

如果是文本格式,自己编程读一行行就可以了。


[解决办法]
我刚给你写了个小例子,你看看,
我给你cpp,可以给我邮件我给你刚写的例子
//---------------------------------------
#include <vcl.h>
#pragma hdrstop
#include "Unit1.h "
//---------------------------------------
#pragma package(smart_init)
#pragma resource "*.dfm "
TForm1 *Form1;
//---------------------------------------
__fastcall TForm1::TForm1(TComponent* Owner)
: TForm(Owner)
{
}
//---------------------------------------
bool TForm1::FromExcelSaveDataSet(AnsiString mFile, TListView *lv)
{
bool Result;
Result = false;
//
int i,j;
AnsiString *mstr;
Variant mExcel_App ;
Variant WorkBooks;
Variant WorkBook,Sheet1;
Variant Range1;
//
try
{
mExcel_App = CreateOleObject( "Excel.Application ");
}
catch(...)
{
ShowMessage( "不能创建excel程序,请查看是否安装 ");
return false;
}
try
{
WorkBooks = mExcel_App.OlePropertyGet( "WorkBooks ");
WorkBooks.OleProcedure( "Open ",mFile.c_str());//打开文件
WorkBook = mExcel_App.OlePropertyGet( "ActiveWorkBook ");
WorkBook.OlePropertyGet( "Sheets ",(Variant)1).OleProcedure( "Select "); //sheet 1
//
Variant Worksheets = WorkBook.OlePropertyGet( "WorkSheets ");
//
Sheet1 = WorkBook.OlePropertyGet( "ActiveSheet "); //获得sheet
//
int col,row;
col = Sheet1.OlePropertyGet( "UsedRange ").OlePropertyGet( "Columns ").OlePropertyGet( "Count ");//列数
row = Sheet1.OlePropertyGet( "UsedRange ").OlePropertyGet( "Rows ").OlePropertyGet( "Count ");//行数
col += 1 ;
//
for(int temp = 0;temp < col ;temp ++)
{
TListColumn *lc = lv-> Columns-> Add();//-> Caption = "序号 ";
}
mstr = new AnsiString[col]; //列数组
//开始遍历excel
for(i = 0;i < row+1;i++)
{
for(j=1;j <=col;j++)
{
mstr[j-1] = Sheet1.OlePropertyGet( "Cells ",i+1,j);
}
//
TListItem *li = lv-> Items-> Add();
li-> Caption = mstr[0];
for (int colTemp = 0 ;colTemp < col-1 ;colTemp ++)
{
li-> SubItems-> Add(mstr[colTemp +1]);
}
}
//关闭
WorkBook.OleProcedure( "Close ");
Result = true;
}
__finally
{
mExcel_App.OleProcedure( "Quit ");
mExcel_App=Unassigned;
delete []mstr;
}
//
return Result;


}
void __fastcall TForm1::btn1Click(TObject *Sender)
{
FromExcelSaveDataSet(edt1-> Text.Trim() ,lv1 );
}
//---------------------------------------
里面很多东西没优化,你自己写写.

[解决办法]
#ifndef Unit1H
#define Unit1H
#include <Classes.hpp>
#include <ComCtrls.hpp>
#include <Controls.hpp>
#include <StdCtrls.hpp>
//---------------------------------------
class TForm1 : public TForm
{
__published:
TButton *Button1;
TListView *ListView1;
void __fastcall Button1Click(TObject *Sender);
public:
__fastcall TForm1(TComponent* Owner);
};
//---------------------------------------
extern PACKAGE TForm1 *Form1;
//---------------------------------------
#endif
////////////////////////////////////////////////////////////////////////////////////
#include <vcl.h>
#pragma hdrstop
#include "Unit1.h "
#include <Excel_2k.h>
#pragma package(smart_init)
#pragma resource "*.dfm "
TForm1 *Form1;
//---------------------------------------
__fastcall TForm1::TForm1(TComponent* Owner):TForm(Owner)
{
ListView1-> ViewStyle=vsReport;
}
//---------------------------------------
void __fastcall TForm1::Button1Click(TObject *Sender)
{
ListView1-> Clear();
ListView1-> Columns-> Clear();

WideString theXls;
theXls=ExtractFilePath(Application-> ExeName) + "yourExcel.xls ";
if(!FileExists(theXls)){ShowMessage( "当前目录下yourExcel.xls不存在文件 ");return;}

TCOM_Application iExcelApp;
try{iExcelApp=CoExcelApplication::Create();}
catch(...) {ShowMessage( "启动 Excel 出错, 大概是没装Excel ");return;}
//iExcelApp-> set_Visible(0,true);

Workbooks *ibooksPtr;
iExcelApp-> get_Workbooks(&ibooksPtr);
ibooksPtr-> Open(theXls.c_bstr(),
TNoParam(),TNoParam(),TNoParam(),TNoParam(),
TNoParam(),TNoParam(),TNoParam(),TNoParam(),
TNoParam(),TNoParam(),TNoParam(),TNoParam(),
0);

_WorksheetPtr isheet;
isheet=iExcelApp-> get_ActiveWorkbook()-> get_ActiveSheet();
long RowCount=isheet-> get_UsedRange(1)-> Rows-> get_Count();
long ColCount=isheet-> get_UsedRange(1)-> Columns-> get_Count();

Range* iRangePtr;
Variant Cell1, Cell2,v;
AnsiString s;

for(int k=0;k <ColCount;k++)
{
TListColumn *NewColumn;
NewColumn = ListView1-> Columns-> Add();
NewColumn-> Caption = "第 "+IntToStr(k)+ "列 ";
}

for(int m=0;m <RowCount;m++)
{
TListItem* item;
item=ListView1-> Items-> Add();
for(int n=0;n <ColCount;n++)
{
Cell1=isheet-> Cells-> get_Item(TVariant(m+1), TVariant(n+1));
Cell2=isheet-> Cells-> get_Item(TVariant(m+1), TVariant(n+1));
isheet-> get_Range(Cell1, Cell2,&iRangePtr);
iRangePtr-> get_Item(TVariant(m+1),TVariant(n+1));
iRangePtr-> Activate();


v=iRangePtr-> get_Value2();
s=v.operator AnsiString();
if(n==0)item-> Caption=s;
else item-> SubItems-> Add(s);
}
}

iRangePtr-> Release();
isheet-> Release();
ibooksPtr-> Release();
iExcelApp-> Quit();
}
//---------------------------------------

读书人网 >C++ Builder

热点推荐