内容发布更新时间 : 2024/12/23 17:59:19星期一 下面是文章的全部内容请认真阅读。
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页