上文介绍了读取Excel文件中数据的方法,这回说明生成一个Excel文件的方法。
初始化Com库和使用的对象都和上文一样,下面这段代码的逻辑是:
1. 先打开一个Excel文件,
2. 在激活的Sheet的下一个sheet中写入数据
3. 保存成另外一个文件
if (!m_oExcelApp.CreateDispatch( _T( "Excel.Application" ), NULL ) )
{
::MessageBox( NULL, _T( "创建Excel服务失败!" ), _T( "错误提示!" ), MB_OK | MB_ICONERROR);
exit(1);
}
//设置为显示
m_oExcelApp.SetVisible(FALSE);
m_oWorkBooks.AttachDispatch( m_oExcelApp.GetWorkbooks(), TRUE );
LPDISPATCH lpDisp = NULL;
COleVariant covTrue((short)TRUE);
COleVariant covFalse((short)FALSE);
COleVariant covOptional((long)DISP_E_PARAMNOTFOUND, VT_ERROR);
Range oCurCell;
// 打开文件
lpDisp = m_oWorkBooks.Open( _T( "K://VoiceS_Excel//09_Backup//02_Test//SourceFile.xls" ),
_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) );
// 获得活动的WorkBook( 工作簿 )
m_oWorkBook.AttachDispatch( lpDisp, TRUE );
// 获得活动的WorkSheet( 工作表 )
m_oWorkSheet.AttachDispatch( m_oWorkBook.GetActiveSheet(), TRUE );
m_oWorkSheet.AttachDispatch( m_oWorkSheet.GetNext() );
m_oWorkSheet.Activate();
// 获得使用的区域Range( 区域 )
m_oCurrRange.AttachDispatch( m_oWorkSheet.GetCells(), TRUE );
// 写入数据
int nRowNum = 0;
m_pExcelOperDlg->getRowNumInListCtrl( nRowNum );
CStringArray* arrayStr;
arrayStr = new CStringArray[nRowNum];
m_pExcelOperDlg->getAllDataInListCtrl( arrayStr ); // 获得ListCtrl中的所有数据,保存到二维数组中
for ( int i = 0; i < nRowNum; i++ ) // 向Excel中写数据
{
for ( int j = 0; j < arrayStr[i].GetSize(); j++ )
{
m_oCurrRange.SetItem( _variant_t( (long)(i+1) ),
_variant_t( (long)(j+1) ),
COleVariant( arrayStr[i].GetAt( j ) ) );
}
}
m_oWorkBook.SaveAs( COleVariant( strFilePath ),
_variant_t(vtMissing),
_variant_t(vtMissing),
_variant_t(vtMissing),
_variant_t(vtMissing),
_variant_t(vtMissing),
0,
_variant_t(vtMissing),
_variant_t(vtMissing),
_variant_t(vtMissing),
_variant_t(vtMissing),
_variant_t(vtMissing) );
// 释放二维数组
delete[] arrayStr;
// 关闭
m_oWorkBook.Close( covOptional, COleVariant( strFilePath ), covOptional );
m_oWorkBooks.Close();
// 释放
m_oCurrRange.ReleaseDispatch();
m_oWorkSheet.ReleaseDispatch();
m_oWorkSheets.ReleaseDispatch();
m_oWorkBook.ReleaseDispatch();
m_oWorkBooks.ReleaseDispatch();
m_oExcelApp.ReleaseDispatch();
m_oExcelApp.Quit();
本文来自CSDN博客,转载请标明出处:http://blog.csdn.net/primer_programer/archive/2008/05/09/2422362.aspx