读取excel数据
来源:互联网 发布:男友追踪器软件 编辑:程序博客网 时间:2024/05/16 07:07
2008-07-20 16:23:09
读excel
staAfx.h
#define INITGUID
#import "c:/program files/common files/system/ado/msado15.dll"no_namespace rename("EOF","EndOfFields")
#include <comdef.h>
#include "icrsint.h"
头文件:
#include "Excel9.h"
#include "comdef.h"
初始化:
CoInitialize(NULL);
_Application app;
Workbooks books;
_Workbook book;
Worksheets sheets;
_Worksheet sheet;
Range range;
if(!app.CreateDispatch("Excel.Application"))
{
AfxMessageBox("Cannot start Excel.");
//return;
}
app.SetVisible(FALSE);
books.AttachDispatch( app.GetWorkbooks(), TRUE );
LPDISPATCH lpDisp = NULL;
COleVariant covTrue((short)TRUE);
COleVariant covFalse((short)FALSE);
COleVariant covOptional((long)DISP_E_PARAMNOTFOUND, VT_ERROR);
Range oCurCell;
lpDisp = books.Open(lpszFile,
_variant_t(vtMissing),
_variant_t(vtMissing),
_variant_t(vtMissing),
_variant_t(vtMissing),
_variant_t(vtMissing),
_variant_t(vtMissing),
_variant_t(vtMissing),
_variant_t(vtMissing),
_variant_t(vtMissing),
_variant_t(vtMissing),
_variant_t(vtMissing),
_variant_t(vtMissing));
// 获得活动的WorkBook( 工作簿 )
book.AttachDispatch( lpDisp, TRUE );
// 获得活动的WorkSheet( 工作表 )
sheet.AttachDispatch( book.GetActiveSheet(), TRUE );
// 获得使用的区域Range( 区域 )
range.AttachDispatch( sheet.GetUsedRange(), TRUE );
// 获得使用的行数
long lgUsedRowNum = 0;
range.AttachDispatch( range.GetRows(), TRUE );
lgUsedRowNum = range.GetCount();
// 获得使用的列数
long lgUsedColumnNum = 0;
range.AttachDispatch( range.GetColumns(), TRUE );
lgUsedColumnNum = range.GetCount();
// 读取Sheet的名称
CString strSheetName = sheet.GetName();
//得到全部Cells,此时,CurrRange是cells的集合
range.AttachDispatch( sheet.GetCells(), TRUE );
// 遍历整个Excel表格
CStringArray* arrayStr;
int nRecordCount = 1;
SAVE_ITEM sItem;
arrayStr = new CStringArray[lgUsedRowNum];
for ( int i2 = 1; i2 < lgUsedRowNum; )
{
for ( int j = 1; j <= lgUsedColumnNum; j++)
{
oCurCell.AttachDispatch( range.GetItem( COleVariant( (long)(i2 + 1)), COleVariant( (long)j ) ).pdispVal, TRUE );
VARIANT varItemName = oCurCell.GetText();
CString strItem;
strItem = varItemName.bstrVal;
//AfxMessageBox(strI tem);
switch(j)
{
case 1:
sItem.sCurveName = strItem;
break;
case 2:
sItem.sCurveType = strItem;
break;
case 3:
sItem.sDate1 = strItem;
break;
case 4:
sItem.fRepayDate = atof(strItem);
break;
case 5:
sItem.fWinPercent = atof(strItem);
break;
case 6:
sItem.fNYear = atof(strItem);
break;
case 7:
sItem.fKYear = atof(strItem);
break;
}
// 判断是否是合并的单元格
/* VARIANT varMerge = oCurCell.GetMergeCells();
if ( varMerge.boolVal == -1 )
{
// AfxMessageBox( _T( "是合并的单元格!" ) );
}
else if ( varMerge.boolVal == 0 )
{
// AfxMessageBox( _T( "不是合并的单元格!" ) );
}*/
arrayStr[i2].Add( strItem );
}
if(sItem.Valid())
{
if(WriteInDB((void*)&sItem)) nRecordCount++;
}
i2++;
}
// 更新列表控件数据
//m_pExcelOperDlg->initListCtrlColumn( lgUsedColumnNum );
//m_pExcelOperDlg->updateListCtrl#( arrayStr, lgUsedRowNum );
// 释放二维数组
delete[] arrayStr;
// 关闭
book.Close( covOptional, COleVariant(lpszFile), covOptional );
books.Close();
// 释放
range.ReleaseDispatch();
sheet.ReleaseDispatch();
sheets.ReleaseDispatch();
book.ReleaseDispatch();
books.ReleaseDispatch();
app.ReleaseDispatch();
app.Quit(); // 这条语句是推出Excel程序,任务管理器中的EXCEL进程会自动结束。
- Excel 读取数据,日期读取
- ASP读取EXCEL数据
- PB读取EXCEL数据
- 读取excel数据
- C#读取Excel数据
- C#读取Excel数据
- C#读取Excel数据
- C#读取Excel数据
- C#读取Excel数据
- C#读取Excel数据
- C#读取Excel数据
- 读取excel数据
- C#读取Excel数据
- 读取Excel表数据
- 读取excel数据
- C#读取Excel数据
- ASP读取EXCEL数据
- 读取EXCEL表数据
- 两个存储过程
- 跟老紫竹学Java-留言板-回复页面(JSTL)
- c++ 解惑之一 (指针 和 typedef)
- 跟老紫竹学Java-留言板-Hibernate页面部分
- 第3-4章 C++和QT简介与列表
- 读取excel数据
- Java中的包
- SQL语句优化汇总
- jsf学习(异常类的封装)
- VC SQL操作
- 在DSP 线性汇编中可否调用C函数,如何调用
- VC 生成excel
- c#创建文件夹并设置权限
- 连接池代码