VC读取Excel单元格的内容并插入到SQL Server数据中 下载本文

内容发布更新时间 : 2024/5/18 11:41:07星期一 下面是文章的全部内容请认真阅读。

VC读取Excel单元格的内容并插入到SQL Server数据中(正确代码)

/* //如果在链接数据时,已经初始化Com文档,可以省略此段代码 //初始化Com库 if (CoInitialize(NULL)!=0) {

AfxMessageBox(\初始化COM支持库失败!\ exit(1); } */ /*

//读取文件中的数据

if (!app.CreateDispatch( _T( \ {

::MessageBox( NULL, _T( \创建Excel服务失败!\错误提示!\ exit(1); }

//设置为显示

app.SetVisible(FALSE);

books.AttachDispatch( app.GetWorkbooks(), TRUE ); //没有这条语句,下面打开文件返回失败。

LPDISPATCH lpDisp = NULL; COleVariantcovTrue((short)TRUE); COleVariantcovFalse((short)FALSE);

COleVariantcovOptional((long)DISP_E_PARAMNOTFOUND, VT_ERROR); Range cell;

// 打开文件

lpDisp = books.Open( strPath, _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), _variant_t(vtMissing), _variant_t(vtMissing) );

第1页

// 获得活动的WorkBook( 工作簿 ) book.AttachDispatch(lpDisp, TRUE );

// 获得活动的WorkSheet( 工作表 )

sheet.AttachDispatch(book.GetActiveSheet(), TRUE ); // 获得使用的区域Range( 区域 )

range.AttachDispatch(sheet.GetUsedRange(), TRUE );

// 获得使用的行数 longlgUsedRowNum = 0;

range.AttachDispatch(range.GetRows(), TRUE ); lgUsedRowNum = range.GetCount(); // 获得使用的列数

longlgUsedColumnNum = 0;

range.AttachDispatch(range.GetColumns(), TRUE ); lgUsedColumnNum = range.GetCount(); // 读取Sheet的名称

CStringstrSheetName = sheet.GetName();

//得到全部Cells,此时,CurrRange是cells的集合 range.AttachDispatch(sheet.GetCells(), TRUE ); //创建数据表

// 遍历整个Excel表格 CStringArray* arrayStr;

arrayStr = new CStringArray[lgUsedRowNum]; for ( int i = 1; i

CStringid,name,bj,sql;

//for ( int j = 1; j <= lgUsedColumnNum; ) //{

cell.AttachDispatch(range.GetItem( COleVariant( (long)(i + 1)), COleVariant( (long)1 ) ).pdispVal, TRUE ); VARIANT varItemId = cell.GetText(); id=varItemId.bstrVal;

// CStringstrItemName = varItemName.bstrVal; cell.AttachDispatch(range.GetItem( COleVariant( (long)(i + 1)), COleVariant( (long)2 ) ).pdispVal, TRUE );

VARIANT varItemName = cell.GetText(); name =varItemName.bstrVal;

cell.AttachDispatch(range.GetItem( COleVariant( (long)(i + 1)), COleVariant( (long)3 ) ).pdispVal, TRUE ); VARIANT varItemBj = cell.GetText();

第2页

bj =varItemBj.bstrVal; //下面语代码将数据插入到数据表中

sql.Format(\ atoi((char*)(_bstr_t)bj));

m_pCon->Execute((_bstr_t)sql,NULL,adCmdText);

// AfxMessageBox(strItemName ); /* // 判断是否是合并的单元格

VARIANT varMerge = cell.GetMergeCells(); if ( varMerge.boolVal == -1 ) {

// AfxMessageBox( _T( \是合并的单元格!\ }

else if ( varMerge.boolVal == 0 ) {

// AfxMessageBox( _T( \不是合并的单元格!\ } */

// arrayStr[i].Add(strItemName ); // j++; // } /* i++; } charnum[255];

m_Count.SetWindowText(itoa(i-1,num,10));

// 更新列表控件数据

// m_pExcelOperDlg->initListCtrlColumn(lgUsedColumnNum );

// m_pExcelOperDlg->updateListCtrlData( arrayStr, lgUsedRowNum );

// 释放二维数组 delete[] arrayStr;

MessageBox(\导入完成\提示\ // 关闭

book.Close(covOptional, COleVariant(strPath ), covOptional ); books.Close(); // 释放

range.ReleaseDispatch(); sheet.ReleaseDispatch(); sheets.ReleaseDispatch(); book.ReleaseDispatch(); books.ReleaseDispatch(); app.ReleaseDispatch();

app.Quit(); // 这条语句是推出Excel程序,任务管理器中的EXCEL进程会自动退出

第3页