还是记一下读取excel的微软的地址和方法(札记)

1 篇文章 0 订阅
本文介绍了如何在C++ .NET和MFC环境下进行Excel自动化操作,特别是使用数组填充和获取特定范围的数据。提供了微软官方的技术支持链接以及错误提示处理方法,包括禁用显示警报、设置Excel可见和恢复用户控制。
摘要由CSDN通过智能技术生成

HOW TO: 从 C++ .NET 和 MFC 实现 Excel 的自动化操作以便使用数组填充或获取某个范围的数据

http://support.microsoft.com/kb/308407

 http://support.microsoft.com/kb/307473/EN-US

 

http://hi.baidu.com/chenlu_vc/blog/item/5d370319e1af57038718bf25.html

关于错误的提示处理

 

 oExcel.put_DisplayAlerts(FALSE);


  oExcel.put_Visible(TRUE);
  oExcel.put_UserControl(TRUE);

几个方法记录

 

CApplication oExcel;
 CWorkbook oBook;
  CWorkbooks oBooks;
  CWorksheets oSheets;
  CWorksheet oSheet;
  CRange oRange;
  COleVariant covOptional(DISP_E_PARAMNOTFOUND,VT_ERROR);
 
  // If you have not created Excel, create a new instance.
  if (oExcel.m_lpDispatch == NULL) {
   oExcel.CreateDispatch(_T("Excel.Application"));
  }
  // Show Excel to the user.
  oExcel.put_Visible(TRUE);
  oExcel.put_UserControl(TRUE);
 
  // Add a new workbook and get the first worksheet in that book.
  oBooks = oExcel.get_Workbooks();
  oBook = oBooks.Add(covOptional);
  oSheets = oBook.get_Worksheets();
  oSheet = oSheets.get_Item(COleVariant((short)1));
 
  // Get a range of data.
  oRange = oSheet.get_Range(COleVariant(_T("A1")),covOptional);
  oRange = oRange.get_Resize(COleVariant((short)5),COleVariant((short)5));
 
  COleSafeArray saRet;
  DWORD numElements[2];
  numElements[0] = 5;
  numElements[1] = 5;
 
  long index[2];
  // Create a BSTR or double safe array.
 if (m_bFillWithStrings.GetCheck())
   saRet.Create(VT_BSTR,2,numElements);
   else
    saRet.Create(VT_R8,2,numElements);
 
  // Fill the array with data.
  for (int iRow = 1; iRow <= 5; iRow++) {
   for (int iCol = 1; iCol <= 5; iCol++) {
    index[0]=iRow-1;
    index[1]=iCol-1;
    if (m_bFillWithStrings.GetCheck()) {
     CString szTemp;
     szTemp.Format(_T("%d|%d"),iRow,iCol);
     BSTR bstr = szTemp.AllocSysString();
     saRet.PutElement(index,bstr);
     SysFreeString(bstr);
    } else {
     double d = iRow * iCol;
     saRet.PutElement(index,&d);
    }
   }
  }
  // Send the array to Excel.
  oRange.put_Value(covOptional,COleVariant(saRet));
 COleVariant temp_path ( _T("temp.xls"));
 oExcel.put_DisplayAlerts(FALSE);
 oBook.SaveAs(temp_path,covOptional,
  covOptional,covOptional,
  covOptional,covOptional,(long)0,covOptional,covOptional,covOptional,
  covOptional,covOptional);
 oBook.Close(COleVariant((short)1),covOptional,covOptional);
 oBooks.Close();
 oExcel.Quit();
 oExcel.ReleaseDispatch();



打开已有处理类似

CWorkbook oBook;
 CWorkbooks oBooks;
 CWorksheets oSheets;
 CWorksheet oSheet;
 CRange oRange;
 COleVariant covOptional(DISP_E_PARAMNOTFOUND,VT_ERROR);
 if (oExcel.m_lpDispatch == NULL) {
  if(!oExcel.CreateDispatch(_T("Excel.Application")))
   {
    AfxMessageBox(_T("您没有安装excel"));
    return;}
 }  

 COleVariant VOptional((long)DISP_E_PARAMNOTFOUND, VT_ERROR);
//  if (oExcel.m_lpDispatch == NULL) {
//   oExcel.CreateDispatch(_T("Excel.Application"));
//  } 

 CString path_t;
 TCHAR szFilters[]=_T("excel文件(*.xls)|*.xls|excel文件(*.xlsx)|*xlsx||");
 CFileDialog fd( TRUE, _T(""), _T("*.xls"),OFN_HIDEREADONLY|OFN_OVERWRITEPROMPT , szFilters, NULL);
 if(fd.DoModal()!=IDOK)
  return ;
 path_t = fd.GetPathName();
  oBooks = oExcel.get_Workbooks();
  oBooks.Open(path_t,VOptional, VOptional, VOptional, VOptional,
   VOptional, VOptional, VOptional, VOptional,
   VOptional, VOptional, VOptional,VOptional,VOptional,VOptional);
  COleVariant index_t((short)1);
  oBook = oBooks.get__Default(index_t);

 if (oExcel.m_lpDispatch == NULL) {
  AfxMessageBox(_T("Excel has not been started.  Press button1 to start Excel."));
  return;
 }
 // Get the first worksheet.
 oSheets = oBook.get_Worksheets();
 oSheet = oSheets.get_Item(COleVariant((short)1));
 // Set the range of data to retrieve
 oRange = oSheet.get_Range(COleVariant(_T("A3")),COleVariant(_T("F5")));

 // Get the data.
 COleSafeArray saRet(oRange.get_Value(covOptional));

 long iRows;
 long iCols;
 saRet.GetUBound(1, &iRows);
 saRet.GetUBound(2, &iCols);

 CString valueString = _T("Array Data:\r\n");
 long index[2];
 // Loop through the data and report the contents.
 for (int rowCounter = 1; rowCounter <= iRows; rowCounter++) {
  for (int colCounter = 1; colCounter <= iCols; colCounter++) {
   index[0]=rowCounter;
   index[1]=colCounter;     
   COleVariant vData;
   saRet.GetElement(index,vData);
   CString szdata(vData);
   valueString += szdata;
   valueString +=_T("\t");  
  }
  valueString += _T("\r\n");
 }
 AfxMessageBox(valueString,MB_SETFOREGROUND,NULL);
 oBook.Close(COleVariant((short)0), VOptional, VOptional);
 oBooks.Close();

 oExcel.Quit();
 oExcel.ReleaseDispatch();


 

 

 

 

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
读取Excel文件数据的方法有多种,以下是其中几种常用的方法: 1. 使用Python的pandas库:pandas是一个强大的数据处理库,可以轻松读取和处理Excel文件。首先需要安装pandas库,然后使用pandas的read_excel函数读取Excel文件,例如: ```python import pandas as pd data = pd.read_excel('file.xlsx') ``` 这样就可以将Excel文件中的数据读取到一个DataFrame对象中,可以方便地进行数据处理和分析。 2. 使用Python的xlrd库:xlrd是一个专门用于读取Excel文件的库。首先需要安装xlrd库,然后使用xlrd的open_workbook函数打开Excel文件,然后通过sheet_by_index或sheet_by_name方法选择要读取的工作表,最后使用row_values方法读取每一行的数据,例如: ```python import xlrd workbook = xlrd.open_workbook('file.xlsx') sheet = workbook.sheet_by_index(0) for row in range(sheet.nrows): data = sheet.row_values(row) # 处理数据 ``` 3. 使用Java的Apache POI库:Apache POI是一个用于操作Microsoft Office格式文件的Java库,可以读取和写入Excel文件。首先需要导入Apache POI相关的jar包,然后使用WorkbookFactory类打开Excel文件,通过Sheet类和Row类读取数据,例如: ```java import org.apache.poi.ss.usermodel.*; Workbook workbook = WorkbookFactory.create(new File("file.xlsx")); Sheet sheet = workbook.getSheetAt(0); for (Row row : sheet) { for (Cell cell : row) { String data = cell.getStringCellValue(); // 处理数据 } } ``` 以上是几种常用的读取Excel文件数据的方法,你可以根据自己的需求选择合适的方法进行操作。
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值