输入excel文件到列表&&输出列表到excel文件

来源:互联网 发布:巨人网络退市市值 编辑:程序博客网 时间:2024/04/28 15:33

输入excel文件到列表&&输出列表到excel文件

1、向项目工程中添加基本的7个类,分别是:CApplication,CMyFont,CRange,CWorkBook,CWorkBooks,CWorkSheet,CWorkSheets,选择MFC Class From TypeLib,在Add Class From 中选中File,在Location中输入或者选择EXCEL.EXE(officer2007为EXCEL.EXE,officer2003为EXCEL9.OLB)的路径。然后在Interface框(即1号框)中选择操作Excel的基本接口,分别是:_Application,_WorkBook,_WorkSheet, Range,Font,WorkBooks,WorkSheets。点击Generated classes(即2号框)中CFont0类,在classes(即3号框)和File(即4号框)中修改其类名为CMyFont,头文件名为CMyFont.h(类名和头文件名,也可以是其他名字,由自己确定)。点击Finish完成添加。


  把CApplication.h,CMyFont.h,CRange.h,CWorkBook.h,CWorkBooks.h,CWorkSheet.h,CWorkSheets.h中的“#import "C:\\Program Files\\Microsoft Office\\Office12\\EXCEL.EXE" no_namespace”注释掉,然后添加头文件: #include <afxdisp.h> 到上面7个文件中去。


例子:

CApplication app;
CWorkbooks books;
CWorkbook book;
CWorksheets sheets;
CWorksheet sheet;
CRange range;
CRange cols;
CString strSheetName;
COleVariant covOptional((long)DISP_E_PARAMNOTFOUND, VT_ERROR);
    LPDISPATCH lpDisp;
CString New_FilePath = _T("D:\\DF数据.xlsx");




    if (::CoInitialize( NULL ) == E_INVALIDARG)
    {
        AfxMessageBox(_T("excel工程初始化Com失败,请检查excel版本是否为2010或者以上!"));
return false;
    }
    if (!app.CreateDispatch(_T("Excel.Application")))
    {
        AfxMessageBox(_T("无法创建Excel应用,请检查excel版本是否为2010或者以上!"));
return false;
    }
books=app.get_Workbooks();
book=books.Add(covOptional);
sheets=book.get_Sheets();


    strSheetName.Format(_T("%04X-%02d-%02d-%02d"),vecDFData[0].dwNuid,vecDFData[0].btUnitID,vecDFData[0].btPhyChlID,vecDFData[0].dwTestID);
    /*创建一个新的Sheet*/


    {//first sheet
        lpDisp = sheets.Add(vtMissing,vtMissing, _variant_t((long)1), vtMissing);
        sheet.AttachDispatch(lpDisp);
        sheet.put_Name(strSheetName);
    }


sheet=sheets.get_Item(COleVariant((short)1));//取一张表
    //写入表头//
for (int Col = 1; Col < 15; Col++)
{
CString str = GetEnglishCharacter(Col) + _T("1");
range=sheet.get_Range(COleVariant(str),COleVariant(str));
switch(Col)
{
case 1:
str.Format(_T("数据序号"));
break;

...
}
range.put_Value2(COleVariant(str));
}
 
int RowNum = 2;//对应excel表行号
for(int i = 0; i < vecDFData.size(); i++)
{
for (int Col = 1; Col < 15; Col++)
{
CString NumStr;//用来转换RowNum
NumStr.Format(_T("%d"),RowNum);//把RowNum转成字符串
CString str = GetEnglishCharacter(Col) + NumStr;
time_t tmTable;
errno_t err;
tm LocalTime;
range=sheet.get_Range(COleVariant(str),COleVariant(str));
switch(Col)
{//把值写到excel表中
case 1:
str.Format(_T("%d"),vecDFData[i].dwTestDataSN);
break;

}
range.put_Value2(COleVariant(str));
}
++RowNum;
}
DeleteFile(New_FilePath);//先删除excel文件,避免下面SaveAs保存时弹出是否替换的对话框
    sheet.SaveAs(New_FilePath,vtMissing,vtMissing,vtMissing,vtMissing,vtMissing,vtMissing,vtMissing,vtMissing,vtMissing);
app.put_UserControl(TRUE);
    app.Quit();
    range.ReleaseDispatch();
    sheet.ReleaseDispatch();
    sheets.ReleaseDispatch();
    book.ReleaseDispatch();
    books.ReleaseDispatch();
    app.ReleaseDispatch();

原创粉丝点击