修改成为系统日期为一级目录,时间为文件名,保存文件时不要打开保存文件的对话框

weixin_41810434 2019-02-09 05:32:59
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();

}
...全文
315 1 打赏 收藏 转发到动态 举报
写回复
用AI写文章
1 条回复
切换为时间正序
请发表友善的回复…
发表回复
幻夢之葉 2019-02-13
  • 打赏
  • 举报
回复
1:获取日期和时间函数
2:根据你自己的需求,生成文件路径
3:去掉打开对话框获取存储路径那个步骤,文件存储路径换成2步骤中生成的路径

不懂就一步步谷歌百度

64,651

社区成员

发帖
与我相关
我的任务
社区描述
C++ 语言相关问题讨论,技术干货分享,前沿动态等
c++ 技术论坛(原bbs)
社区管理员
  • C++ 语言社区
  • encoderlee
  • paschen
加入社区
  • 近7日
  • 近30日
  • 至今
社区公告
  1. 请不要发布与C++技术无关的贴子
  2. 请不要发布与技术无关的招聘、广告的帖子
  3. 请尽可能的描述清楚你的问题,如果涉及到代码请尽可能的格式化一下

试试用AI创作助手写篇文章吧