修改成为系统日期为一级目录,时间为文件名,保存文件时不要打开保存文件的对话框
void CExportExcelDlg::OnBnClickedButton1()
{
CFileDialog FileDialog(FALSE, _T("xls"), NULL, OFN_HIDEREADONLY | OFN_OVERWRITEPROMPT,
_T("Microsoft Excel 2000(*.xls)|*.xls|所有文件(*.*)"), this);
if (FileDialog.DoModal() != IDOK)
return;
CString cStrFile = FileDialog.GetPathName(); //选择保存路径名称
if (::PathFileExists(cStrFile))
CString cStrFile = _T("E:\\myexcel.xls");
COleVariant covTrue((short)TRUE), covFalse((short)FALSE), covOptional((long)
DISP_E_PARAMNOTFOUND, VT_ERROR);
CApplication app; //Excel程序
CWorkbooks books; //工作簿集合
CWorkbook book; //工作表
CWorksheets sheets; //工作簿集合
CWorksheet sheet; //工作表集合
CRange range; //使用区域
CoUninitialize();
book.PrintPreview(_variant_t(false));
if (CoInitialize(NULL) == S_FALSE)
{
MessageBox(L"初始化COM支持库失败!");
return;
}
if (!app.CreateDispatch(_T("Excel.Application"))) //创建IDispatch接口对象
{
MessageBox(_T("Error!"));
}
books = app.get_Workbooks();
book = books.Add(covOptional);
sheets = book.get_Worksheets();
sheet = sheets.get_Item(COleVariant((short)1)); //得到第一个工作表
CHeaderCtrl* pmyHeaderCtrl = m_list.GetHeaderCtrl(); //获取表头
int m_cols = pmyHeaderCtrl->GetItemCount(); //获取列数
int m_rows = m_list.GetItemCount(); //获取行数
TCHAR lpBuffer[256];
//此结构包含关于头控件中的项的信息,此结构已被更新以支持标题项图像和顺序值。
HDITEM hdi;
hdi.mask = HDI_TEXT;
hdi.pszText = lpBuffer;
hdi.cchTextMax = 256;
CString colname;
CString strTemp;
int iRow, iCol;
for (iCol = 0; iCol < m_cols; iCol++) //将列表的标题头写入EXCEL
{
GetCellName(1, iCol + 1, colname); //(colname就是对应表格的A1,B1,C1,D1)
range = sheet.get_Range(COleVariant(colname), COleVariant(colname));
pmyHeaderCtrl->GetItem(iCol, &hdi); //获取表头每列的信息
range.put_Value2(COleVariant(hdi.pszText)); //设置每列的内容
int nWidth = m_list.GetColumnWidth(iCol) / 6;
//得到第iCol+1列
range.AttachDispatch(range.get_Item(_variant_t((long)(iCol + 1)), vtMissing).pdispVal, true);
//设置列宽
range.put_ColumnWidth(_variant_t((long)nWidth));
}
range = sheet.get_Range(COleVariant(_T("A1")), COleVariant(colname));
range.put_RowHeight(_variant_t((long)50)); //设置行的高度
range.put_VerticalAlignment(COleVariant((short)-4108)); //xlVAlignCenter=-4108
COleSafeArray saRet; //COleSafeArray类是用于处理任意类型和维数的数组的类
DWORD numElements[] = { m_rows, m_cols }; //行列写入数组
saRet.Create(VT_BSTR, 2, numElements); //创建所需的数组
range = sheet.get_Range(COleVariant(_T("A2")), covOptional); //从A2开始
range = range.get_Resize(COleVariant((short)m_rows), COleVariant((short)m_cols)); //表的区域
long index[2];
//将列表内容写入EXCEL
for (iRow = 1; iRow <= m_rows; iRow++)
{
for (iCol = 1; iCol <= m_cols; iCol++)
{
index[0] = iRow - 1;
index[1] = iCol - 1;
CString szTemp;
szTemp = m_list.GetItemText(iRow - 1, iCol - 1); //取得m_list控件中的内容
BSTR bstr = szTemp.AllocSysString(); //AlLogyString方法分配一个自动化兼容的新BSTR字符串。
saRet.PutElement(index, bstr); //把m_list控件中的内容放入saRet
SysFreeString(bstr);
}
}
range.put_Value2(COleVariant(saRet)); //将得到的数据的saRet数组值放入表格
book.SaveCopyAs(COleVariant(cStrFile)); //保存到cStrFile文件
book.put_Saved(true);
books.Close();
book.ReleaseDispatch();
books.ReleaseDispatch();
app.ReleaseDispatch();
app.Quit();
}