VS MFC 写EXCEL文件的问题!

时间:2021-10-31 13:14:52
贴下代码

void xxx::OnBnClickedButTofile()
{
// TODO: 在此添加控件通知处理程序代码
//写Excel
CFileDialog Excelfile(TRUE,NULL,NULL,OFN_HIDEREADONLY|OFN_OVERWRITEPROMPT,_T("excel文件(*.xls;*.xlsx)|*.xls;*.xlsx||"),AfxGetMainWnd());
if (IDOK != Excelfile.DoModal()) //[判断是否对文件对话框操作完成]
{
AfxMessageBox("文件打开失败");
}
CString sExcelFile = Excelfile.GetPathName(); //返回文件路径(盘符+路径+文件名)
CExcelPro exclPro;
exclPro.InitExcel(sExcelFile);
exclPro.CreateSheet("SensorTrackData");
exclPro.CreateSheet("RealData");
exclPro.CreateSheet("SensorInfo");
exclPro.CreateSheet("TargetInfo");
exclPro.CreateSheet("TitleInfo");
exclPro.WriteTitleInfoToExcel(m_pTitle);
exclPro.WriteTargetInfoToExcel(m_pTargets);
exclPro.WriteSensorInfoToExcel(m_pSensors);
exclPro.WriteRealDataToExcel(m_pTgtJuQing, m_nTgtNum);
exclPro.WriteSensorTrackDataToExcel(m_pSnrJuQing, m_nSnrNum);
exclPro.SaveExcel(sExcelFile);
exclPro.Release();
}
bool xxx::InitExcel(CString path)
{
// m_path = path;
::CoInitialize(NULL);
if (!app.CreateDispatch(_T("Excel.Application")))
{
AfxMessageBox("无法启动Excel启动器!");
exit(1);   
}
books.AttachDispatch(app.get_Workbooks(),true);   
book.AttachDispatch(books.Add(_variant_t(path)));//获取选择的Excel文件
sheets.AttachDispatch(book.get_Worksheets(),true);//获取文件中的所有sheet
return false;
}

void xxx::Release()
{

range.ReleaseDispatch();
sheet.ReleaseDispatch();   
sheets.ReleaseDispatch();   
book.ReleaseDispatch();  
books.ReleaseDispatch();  
app.ReleaseDispatch(); 
app.Quit(); 
::CoUninitialize(); 
}

void xxx::SaveExcel(CString path)
{
book.SaveCopyAs(COleVariant(path));  
    book.put_Saved(TRUE);  
}
void xxx::CreateSheet(CString sSheetName)
{
if (bSheet)
{
//第一个表
sheet.AttachDispatch(sheets.get_Item(COleVariant((short)(1))));
}else{
//不是第一个表
sheet.AttachDispatch(sheets.Add(vtMissing, vtMissing, COleVariant((short)(1)), vtMissing));
}

bSheet = false;

//设置表名
sheet.put_Name(sSheetName);
range.AttachDispatch(sheet.get_UsedRange(), TRUE);
}
bool xxx::WriteTitleInfoToExcel(_TestItemInfo *m_pTitle)
{
sheet.AttachDispatch(sheets.get_Item(_variant_t("TitleInfo")),true);//获取sheet1区域
range.AttachDispatch(sheet.get_Cells(),true);//获取sheet1所有的单元格,重置当前区域为A1
range.put_Item(_variant_t(1), _variant_t(1), COleVariant("xxx"));
range.put_Item(_variant_t(1), _variant_t(2), COleVariant("xxx"));
range.put_Item(_variant_t(1), _variant_t(3), COleVariant("xxx"));
range.put_Item(_variant_t(1), _variant_t(4), COleVariant("xxx"));
range.put_Item(_variant_t(1), _variant_t(5), COleVariant("xxx"));
range.put_Item(_variant_t(1), _variant_t(6), COleVariant("xxx"));

range.put_Item(_variant_t(2), _variant_t(1), COleVariant(_T("")+m_pTitle->nTitleId));
range.put_Item(_variant_t(2), _variant_t(1), COleVariant(_T("")+m_pTitle->nSailId));
range.put_Item(_variant_t(2), _variant_t(1), COleVariant(_T("")+m_pTitle->strTestItemName));
range.put_Item(_variant_t(2), _variant_t(1), COleVariant(m_path));
range.put_Item(_variant_t(2), _variant_t(1), COleVariant(_T("false")));
range.put_Item(_variant_t(2), _variant_t(1), COleVariant(_T("")+1));

return NULL;
}

数据是可以写进指定的EXCEL,但是每次写的时候会创建出两个EXCEL文件.如下图.
VS MFC 写EXCEL文件的问题!
我创建了一个叫名字叫工作簿的EXCEL文件,运行后会自动生成一个工作簿.xlsx和一个工作簿1.xlsx。
取其他的名字也是一样会多一个1的文件
  求大神指导!

1 个解决方案

#1


给自己顶上去 VS MFC 写EXCEL文件的问题!

#1


给自己顶上去 VS MFC 写EXCEL文件的问题!