读取xls文件示例
来源:互联网 发布:为何选择软件测试 编辑:程序博客网 时间:2024/04/29 06:57
读取xls文件示例 :
//变量定义
_Application app; //Excel应用程序接口
Workbooks books; //工作薄集合
_Workbook book; //工作薄
Worksheets sheets; //工作表集合
_Worksheet sheet; //工作表
Range range; //Excel中针对单元格的操作都应先获取其对应的Range对象
Font font;
Range cols;
Range iCell;
LPDISPATCH lpDisp;
COleVariant vResult;
COleVariant
covTrue((short)TRUE),
covFalse((short)FALSE),
covOptional((long)DISP_E_PARAMNOTFOUND, VT_ERROR);
//初始化
if( !app.CreateDispatch(L"Excel.Application") ){
this->MessageBox(L"无法创建Excel应用!");
return;
}
app.SetVisible(TRUE); //可见
app.SetUserControl(TRUE); //用户可控制
//打开XLS文件
books.AttachDispatch(app.GetWorkbooks());
lpDisp = books.Open(L"d:\\3.xls",
covOptional, covOptional, covOptional, covOptional, covOptional,
covOptional, covOptional, covOptional, covOptional, covOptional,
covOptional, covOptional );
//得到Workbook
book.AttachDispatch(lpDisp);
//得到Worksheets
sheets.AttachDispatch(book.GetWorksheets());
//得到当前活跃sheet
//如果有单元格正处于编辑状态中,此操作不能返回,会一直等待
lpDisp=book.GetActiveSheet();
sheet.AttachDispatch(lpDisp);
//*****
//读取已经使用区域的信息,包括已经使用的行数、列数、起始行、起始列
Range usedRange;
usedRange.AttachDispatch(sheet.GetUsedRange());
range.AttachDispatch(usedRange.GetRows());
long iRowNum=range.GetCount(); //已经使用的行数
range.AttachDispatch(usedRange.GetColumns());
long iColNum=range.GetCount(); //已经使用的列数
long iStartRow=usedRange.GetRow(); //已使用区域的起始行,从开始
long iStartCol=usedRange.GetColumn(); //已使用区域的起始列,从开始
//读取第一个单元格的值
range.AttachDispatch(sheet.GetCells());
range.AttachDispatch(range.GetItem (COleVariant((long)1),COleVariant((long)1)).pdispVal );
vResult =range.GetValue();
CString str;
if(vResult.vt == VT_BSTR) //字符串
{
str=vResult.bstrVal;
}
else if (vResult.vt==VT_R8) //8字节的数字
{
str.Format(L"%f",vResult.dblVal);
}
else if(vResult.vt==VT_DATE) //时间格式
{
SYSTEMTIME st;
VariantTimeToSystemTime((long)&vResult.date, &st);
}
else if(vResult.vt==VT_EMPTY) //单元格空的
{
str="";
}
//读取第一个单元格的对齐方式,数据类型:VT_I4
//读取水平对齐方式
range.AttachDispatch(sheet.GetCells());
iCell.AttachDispatch((range.GetItem (COleVariant(long(1)), COleVariant(long(1)))).pdispVal);
vResult.lVal=0;
vResult=iCell.GetHorizontalAlignment();
if(vResult.lVal!=0)
{
switch (vResult.lVal)
{
case 1: //默认
break;
case -4108: //居中
break;
case -4131 : //*左
break;
case -4152 : //*右
break;
}
}
//垂直对齐方式
iCell.AttachDispatch((range.GetItem (COleVariant(long(1)), COleVariant(long(1)))).pdispVal);
vResult.lVal=0;
vResult=iCell.GetVerticalAlignment();
if(vResult.lVal!=0)
{
switch (vResult.lVal)
{
case -4160 : //*上
break;
case -4108 : //居中
break;
case -4107 : //*下
break;
}
}
//设置第一个单元格字体颜色:红色
range.AttachDispatch(sheet.GetCells());
range.AttachDispatch((range.GetItem (COleVariant(long(1)), COleVariant(long(1)))).pdispVal);
font.AttachDispatch(range.GetFont());
font.SetColor(COleVariant((long)0xFF0000));
//合并单元格的处理
//包括判断第一个单元格是否为合并单元格,以及将第一个单元格进行合并
Range unionRange;
range.AttachDispatch(sheet.GetCells());
unionRange.AttachDispatch(range.GetItem (COleVariant((long)1),COleVariant((long)1)).pdispVal );
vResult=unionRange.GetMergeCells();
if(vResult.boolVal==-1) //是合并的单元格
{
//合并单元格的行数
range.AttachDispatch (unionRange.GetRows ());
long iUnionRowNum=range.GetCount ();
//合并单元格的列数
range.AttachDispatch (unionRange.GetColumns ());
long iUnionColumnNum=range.GetCount ();
//合并区域的起始行,列
long iUnionStartRow=unionRange.GetRow(); //起始行,从开始
long iUnionStartCol=unionRange.GetColumn(); //起始列,从开始
}
else if(vResult.boolVal==0)
{
//不是合并的单元格
}
//将第一个单元格合并成行,列
range.AttachDispatch(sheet.GetCells());
unionRange.AttachDispatch(range.GetItem (COleVariant((long)1),COleVariant((long)1)).pdispVal ); //第一个单元格
unionRange.AttachDispatch(unionRange.GetResize(COleVariant((long)3),COleVariant((long)2))); //GetResize(3,2) 从第一个单元格开始合并行列的所有单元格
unionRange.Merge(COleVariant((long)0)); //合并单元格
//将文件保存为.xls
book.SaveAs(COleVariant(L"C:\\2.xls"),covOptional,covOptional,
covOptional,covOptional,covOptional,0,
covOptional,covOptional,covOptional,covOptional);
book.Close (covOptional,COleVariant(L"d:\\3.xls"),covOptional);
books.Close();
//释放对象(相当重要!)
range.ReleaseDispatch();
cols.ReleaseDispatch();
sheet.ReleaseDispatch();
sheets.ReleaseDispatch();
book.ReleaseDispatch();
books.ReleaseDispatch();
//App一定要释放,否则程序结束后还会有一个Excel进程驻留在内存中,而且程序重复运行的时候会出错
app.ReleaseDispatch();
app.Quit();
- 读取xls文件示例
- 读取xls文件示例
- 3、读取xls文件示例
- Java读取xls文件
- python读取xls文件
- python读取xls文件
- java读取xls文件
- PHP 读取xls文件
- python读取xls文件
- POI读取xls文件笔记
- 使用python读取xls文件
- QT 读取 EXCEL XLS文件
- 读取CSV XLSX XLS文件
- 利用jxl读取xls文件
- 利用jxl读取xls文件
- JXL读取xls的简单示例
- java 读取txt文件和xls文件
- JAVA读取xls文件和xlsx文件
- Android开发之onClick事件的三种写法
- 修饰符
- Java背后的秘密之虚拟机的组成部件02
- linux 串口编程
- CreateEvent的用法
- 读取xls文件示例
- C#中调用PDFCreator生成PDF文件
- 脏读、不可重复读和幻读
- Android 中Parcelable的作用
- double 四舍五入三位
- .人的一生就像搭上一辆不知道开往何处的列车
- 持续集成学习笔记-入门篇(9)团队管理:成员&权限设置、成果追踪与结果通知
- 我的WCF学习(一)
- unity3d的一些学习资料