MFC学习之 将 list 表里的信息写入.txt文本 和 .xls EXCEL 文件中(ODBC)
2017-06-02 10:44
609 查看
原文链接:http://blog.csdn.net/abidepan/article/details/8266028#comments
[cpp]
view plain
copy
print?
1、将 listcontrol 表中的信息 用 Cfile 函数写入 .txt 中 ,用ODBC来实现excel的写操作。
[cpp]
view plain
copy
print?
afx_msg void OnBnClickedButtonExport();
int32_t ExportToTXT(CString& strFilePath);
int32_t ExportToXLS(CString& strFilePath);
在XXXDlg.cpp中
[cpp]
view plain
copy
print?
void CLogPageDlg::OnBnClickedButtonExport()
{
//弹出保存文件对话框,输入保存的日志文件名,并选择保存类型 txt | xls
SYSTEMTIME st;
GetLocalTime(&st);
CString str;
str.Format(_T("%4d%02d%02d%02d%02d%02d.txt"), st.wYear, st.wMonth, st.wDay, st.wHour, st.wMinute, st.wSecond);
CFileDialog dlg(FALSE, _T("txt"), str, OFN_EXPLORER | OFN_PATHMUSTEXIST, _T("Text Files (*.txt)|*.txt|WorkSheet Files (*.xls)|*.xls||"));
if (IDOK != dlg.DoModal())
{
return;
}
//开始导出
CString strPathName = dlg.GetPathName();
CString strExt = dlg.GetFileExt();
strExt.MakeLower();
int32_t ret = 0;
if (_T("txt") == strExt)//保存txt
{
ret = ExportToTXT(strPathName);
}
else if (_T("xls") == strExt)//保存xls
{
ret = ExportToXLS(strPathName);
}
return;
}
[cpp]
view plain
copy
print?
int32_t CLogPageDlg::ExportToTXT(CString& strFilePath)
{
USES_CONVERSION;
CFile mytxtFile;
CString strCaption, strMsg;
if(!mytxtFile.Open(strFilePath, CFile::modeCreate | CFile::modeReadWrite))
{
strCaption.LoadString(IDS_MESSAGEBOX_CAPTION);
strMsg.LoadString(IDS_OPENFILE_FAILED);
strMsg += strFilePath;
MessageBoxDLg(strMsg, strCaption, MB_OK | MB_ICONERROR, this);
return fail;
}
//计算列的宽度
int32_t width[5] = {0};
int32_t i = 0, j = 0, nLen = 0;
int32_t nCount = m_logList.GetItemCount();
//构造格式化字符串
char format[512] = {0};
char buf[1024] = {0};
CString str0, str1, str2, str3, str4;
str0.LoadString(IDS_COME);
width[0] = strlen(T2A(str0));
str1.LoadString(IDS_TIME); width[1] = strlen(T2A(str1));
str2.LoadString(IDS_USERS);
width[2] = strlen(T2A(str2));
str3.LoadString(IDS_CONTENT);
width[3] = strlen(T2A(str3));
str4.LoadString(IDS_REMAKE);
width[4] = strlen(T2A(str4));
for (i = 0; i < 5; i++)
{
for (j = 0; j < nCount; j++)
{
nLen = strlen(T2A(m_logList.GetItemText(j, i)));
if (nLen > width[i]) width[i] = nLen;
}
//多点间隔
width[i] += 10;
}
//format
sprintf_s(format, "%%-%ds %%-%ds %%-%ds %%-%ds %%-%ds \r\n", width[0], width[1], width[2], width[3], width[4]);
//打印列名
sprintf_s(buf, format, T2A(str0), T2A(str1), T2A(str2), T2A(str3), T2A(str4));
mytxtFile.Write(buf, strlen(buf));
for (i = 0; i < nCount; i++)
{
str0 = m_logList.GetItemText(i, 0);
str1 = m_logList.GetItemText(i, 1);
str2 = m_logList.GetItemText(i, 2);
str3 = m_logList.GetItemText(i, 3);
str4 = m_logList.GetItemText(i, 4);
sprintf_s(buf, format, T2A(str0), T2A(str1), T2A(str2), T2A(str3), T2A(str4));
mytxtFile.Write(buf, strlen(buf));
}
mytxtFile.Close();
return success;
}
[cpp]
view plain
copy
print?
int32_t CLogPageDlg::ExportToXLS(CString& strFilePath)
{
CDatabase database;
CString sDriver = _T("MICROSOFT EXCEL DRIVER (*.XLS)"); // Excel安装驱动
CString sSql;
CString strCaption, strMsg;
try
{
//检测是否安装了excel驱动程序
if (!CheckExcelDriver())
{
strCaption.LoadString(IDS_MESSAGEBOX_CAPTION);
strMsg.LoadString(IDS_EXCEL_DRIVER_FAILED);
MessageBoxDLg(strMsg, strCaption, MB_OK | MB_ICONERROR, this);
return fail;
}
//创建excel连接字符串
sSql.Format(_T("DRIVER={%s};DSN='';FIRSTROWHASNAMES=1;READONLY=FALSE;CREATE_DB=\"%s\";DBQ=%s"),
sDriver, strFilePath, strFilePath);
//打开xls文件失败,成功则创建xls数据库文件
if(!database.OpenEx(sSql, CDatabase::noOdbcDialog))
{
strCaption.LoadString(IDS_MESSAGEBOX_CAPTION);
strMsg.LoadString(IDS_OPEN_EXCEL_FAILED);
MessageBoxDLg(strMsg, strCaption, MB_OK | MB_ICONERROR, this);
return fail;
}
//创建表
CString str0, str1, str2, str3, str4;
str0.LoadString(IDS_COME);
str1.LoadString(IDS_TIME);
str2.LoadString(IDS_USERS);
str3.LoadString(IDS_CONTENT);
str4.LoadString(IDS_REMAKE);
sSql.Format(_T("CREATE TABLE log (%s TEXT, %s TEXT, %s TEXT, %s TEXT, %s TEXT)"),
str0, str1, str2, str3, str4);
database.ExecuteSQL(sSql);
//循环导入数据
int32_t i = 0, j = 0;
CString str5, str6, str7, str8, str9;
int32_t nCount = m_logList.GetItemCount();
for (i = 0; i < nCount; i++)
{
str5 = m_logList.GetItemText(i, 0);
str6 = m_logList.GetItemText(i, 1);
str7 = m_logList.GetItemText(i, 2);
str8 = m_logList.GetItemText(i, 3);
str9 = m_logList.GetItemText(i, 4);
sSql.Format(_T("INSERT INTO log (%s, %s, %s, %s, %s) values('%s', '%s', '%s', '%s', '%s')"),
str0, str1, str2, str3, str4, str5, str6, str7, str8, str9);
database.ExecuteSQL(sSql);
}
//关闭xls数据库
database.Close();
}
catch(...)
{
//提示excel操作出现异常
strCaption.LoadString(IDS_MESSAGEBOX_CAPTION);
strMsg.LoadString(IDS_EXCEL_OPENFILE_FAILED);
MessageBoxDLg(strMsg, strCaption, MB_OK | MB_ICONERROR, this);
return fail;
}
return success;
}
[cpp]
view plain
copy
print?
BOOL CLogPageDlg::CheckExcelDriver()
{
TCHAR szBuf[2001] = {0};
WORD cbBufMax = 2000;
WORD cbBufOut = 0;
TCHAR *pszBuf = szBuf;
//获取已安装驱动的名称
if (!SQLGetInstalledDrivers(szBuf, cbBufMax, &cbBufOut))
{
return FALSE;
}
//查找excel
while (_tcslen(pszBuf) > 0)
{
if (NULL != _tcsstr(pszBu
b9f9
f, _T("Excel")))
{
return TRUE;
}
pszBuf += _tcslen(pszBuf) + 1;
}
return FALSE;
}
[cpp]
view plain
copy
print?
1、将 listcontrol 表中的信息 用 Cfile 函数写入 .txt 中 ,用ODBC来实现excel的写操作。
1、将 listcontrol 表中的信息 用 Cfile 函数写入 .txt 中 ,用ODBC来实现excel的写操作。
[cpp]
view plain
copy
print?
afx_msg void OnBnClickedButtonExport();
int32_t ExportToTXT(CString& strFilePath);
int32_t ExportToXLS(CString& strFilePath);
afx_msg void OnBnClickedButtonExport(); int32_t ExportToTXT(CString& strFilePath); int32_t ExportToXLS(CString& strFilePath);
在XXXDlg.cpp中
[cpp]
view plain
copy
print?
void CLogPageDlg::OnBnClickedButtonExport()
{
//弹出保存文件对话框,输入保存的日志文件名,并选择保存类型 txt | xls
SYSTEMTIME st;
GetLocalTime(&st);
CString str;
str.Format(_T("%4d%02d%02d%02d%02d%02d.txt"), st.wYear, st.wMonth, st.wDay, st.wHour, st.wMinute, st.wSecond);
CFileDialog dlg(FALSE, _T("txt"), str, OFN_EXPLORER | OFN_PATHMUSTEXIST, _T("Text Files (*.txt)|*.txt|WorkSheet Files (*.xls)|*.xls||"));
if (IDOK != dlg.DoModal())
{
return;
}
//开始导出
CString strPathName = dlg.GetPathName();
CString strExt = dlg.GetFileExt();
strExt.MakeLower();
int32_t ret = 0;
if (_T("txt") == strExt)//保存txt
{
ret = ExportToTXT(strPathName);
}
else if (_T("xls") == strExt)//保存xls
{
ret = ExportToXLS(strPathName);
}
return;
}
void CLogPageDlg::OnBnClickedButtonExport() { //弹出保存文件对话框,输入保存的日志文件名,并选择保存类型 txt | xls SYSTEMTIME st; GetLocalTime(&st); CString str; str.Format(_T("%4d%02d%02d%02d%02d%02d.txt"), st.wYear, st.wMonth, st.wDay, st.wHour, st.wMinute, st.wSecond); CFileDialog dlg(FALSE, _T("txt"), str, OFN_EXPLORER | OFN_PATHMUSTEXIST, _T("Text Files (*.txt)|*.txt|WorkSheet Files (*.xls)|*.xls||")); if (IDOK != dlg.DoModal()) { return; } //开始导出 CString strPathName = dlg.GetPathName(); CString strExt = dlg.GetFileExt(); strExt.MakeLower(); int32_t ret = 0; if (_T("txt") == strExt)//保存txt { ret = ExportToTXT(strPathName); } else if (_T("xls") == strExt)//保存xls { ret = ExportToXLS(strPathName); } return; }
[cpp]
view plain
copy
print?
int32_t CLogPageDlg::ExportToTXT(CString& strFilePath)
{
USES_CONVERSION;
CFile mytxtFile;
CString strCaption, strMsg;
if(!mytxtFile.Open(strFilePath, CFile::modeCreate | CFile::modeReadWrite))
{
strCaption.LoadString(IDS_MESSAGEBOX_CAPTION);
strMsg.LoadString(IDS_OPENFILE_FAILED);
strMsg += strFilePath;
MessageBoxDLg(strMsg, strCaption, MB_OK | MB_ICONERROR, this);
return fail;
}
//计算列的宽度
int32_t width[5] = {0};
int32_t i = 0, j = 0, nLen = 0;
int32_t nCount = m_logList.GetItemCount();
//构造格式化字符串
char format[512] = {0};
char buf[1024] = {0};
CString str0, str1, str2, str3, str4;
str0.LoadString(IDS_COME);
width[0] = strlen(T2A(str0));
str1.LoadString(IDS_TIME); width[1] = strlen(T2A(str1));
str2.LoadString(IDS_USERS);
width[2] = strlen(T2A(str2));
str3.LoadString(IDS_CONTENT);
width[3] = strlen(T2A(str3));
str4.LoadString(IDS_REMAKE);
width[4] = strlen(T2A(str4));
for (i = 0; i < 5; i++)
{
for (j = 0; j < nCount; j++)
{
nLen = strlen(T2A(m_logList.GetItemText(j, i)));
if (nLen > width[i]) width[i] = nLen;
}
//多点间隔
width[i] += 10;
}
//format
sprintf_s(format, "%%-%ds %%-%ds %%-%ds %%-%ds %%-%ds \r\n", width[0], width[1], width[2], width[3], width[4]);
//打印列名
sprintf_s(buf, format, T2A(str0), T2A(str1), T2A(str2), T2A(str3), T2A(str4));
mytxtFile.Write(buf, strlen(buf));
for (i = 0; i < nCount; i++)
{
str0 = m_logList.GetItemText(i, 0);
str1 = m_logList.GetItemText(i, 1);
str2 = m_logList.GetItemText(i, 2);
str3 = m_logList.GetItemText(i, 3);
str4 = m_logList.GetItemText(i, 4);
sprintf_s(buf, format, T2A(str0), T2A(str1), T2A(str2), T2A(str3), T2A(str4));
mytxtFile.Write(buf, strlen(buf));
}
mytxtFile.Close();
return success;
}
int32_t CLogPageDlg::ExportToTXT(CString& strFilePath) { USES_CONVERSION; CFile mytxtFile; CString strCaption, strMsg; if(!mytxtFile.Open(strFilePath, CFile::modeCreate | CFile::modeReadWrite)) { strCaption.LoadString(IDS_MESSAGEBOX_CAPTION); strMsg.LoadString(IDS_OPENFILE_FAILED); strMsg += strFilePath; MessageBoxDLg(strMsg, strCaption, MB_OK | MB_ICONERROR, this); return fail; } //计算列的宽度 int32_t width[5] = {0}; int32_t i = 0, j = 0, nLen = 0; int32_t nCount = m_logList.GetItemCount(); //构造格式化字符串 char format[512] = {0}; char buf[1024] = {0}; CString str0, str1, str2, str3, str4; str0.LoadString(IDS_COME); width[0] = strlen(T2A(str0)); str1.LoadString(IDS_TIME); width[1] = strlen(T2A(str1)); str2.LoadString(IDS_USERS); width[2] = strlen(T2A(str2)); str3.LoadString(IDS_CONTENT); width[3] = strlen(T2A(str3)); str4.LoadString(IDS_REMAKE); width[4] = strlen(T2A(str4)); for (i = 0; i < 5; i++) { for (j = 0; j < nCount; j++) { nLen = strlen(T2A(m_logList.GetItemText(j, i))); if (nLen > width[i]) width[i] = nLen; } //多点间隔 width[i] += 10; } //format sprintf_s(format, "%%-%ds %%-%ds %%-%ds %%-%ds %%-%ds \r\n", width[0], width[1], width[2], width[3], width[4]); //打印列名 sprintf_s(buf, format, T2A(str0), T2A(str1), T2A(str2), T2A(str3), T2A(str4)); mytxtFile.Write(buf, strlen(buf)); for (i = 0; i < nCount; i++) { str0 = m_logList.GetItemText(i, 0); str1 = m_logList.GetItemText(i, 1); str2 = m_logList.GetItemText(i, 2); str3 = m_logList.GetItemText(i, 3); str4 = m_logList.GetItemText(i, 4); sprintf_s(buf, format, T2A(str0), T2A(str1), T2A(str2), T2A(str3), T2A(str4)); mytxtFile.Write(buf, strlen(buf)); } mytxtFile.Close(); return success; }
[cpp]
view plain
copy
print?
int32_t CLogPageDlg::ExportToXLS(CString& strFilePath)
{
CDatabase database;
CString sDriver = _T("MICROSOFT EXCEL DRIVER (*.XLS)"); // Excel安装驱动
CString sSql;
CString strCaption, strMsg;
try
{
//检测是否安装了excel驱动程序
if (!CheckExcelDriver())
{
strCaption.LoadString(IDS_MESSAGEBOX_CAPTION);
strMsg.LoadString(IDS_EXCEL_DRIVER_FAILED);
MessageBoxDLg(strMsg, strCaption, MB_OK | MB_ICONERROR, this);
return fail;
}
//创建excel连接字符串
sSql.Format(_T("DRIVER={%s};DSN='';FIRSTROWHASNAMES=1;READONLY=FALSE;CREATE_DB=\"%s\";DBQ=%s"),
sDriver, strFilePath, strFilePath);
//打开xls文件失败,成功则创建xls数据库文件
if(!database.OpenEx(sSql, CDatabase::noOdbcDialog))
{
strCaption.LoadString(IDS_MESSAGEBOX_CAPTION);
strMsg.LoadString(IDS_OPEN_EXCEL_FAILED);
MessageBoxDLg(strMsg, strCaption, MB_OK | MB_ICONERROR, this);
return fail;
}
//创建表
CString str0, str1, str2, str3, str4;
str0.LoadString(IDS_COME);
str1.LoadString(IDS_TIME);
str2.LoadString(IDS_USERS);
str3.LoadString(IDS_CONTENT);
str4.LoadString(IDS_REMAKE);
sSql.Format(_T("CREATE TABLE log (%s TEXT, %s TEXT, %s TEXT, %s TEXT, %s TEXT)"),
str0, str1, str2, str3, str4);
database.ExecuteSQL(sSql);
//循环导入数据
int32_t i = 0, j = 0;
CString str5, str6, str7, str8, str9;
int32_t nCount = m_logList.GetItemCount();
for (i = 0; i < nCount; i++)
{
str5 = m_logList.GetItemText(i, 0);
str6 = m_logList.GetItemText(i, 1);
str7 = m_logList.GetItemText(i, 2);
str8 = m_logList.GetItemText(i, 3);
str9 = m_logList.GetItemText(i, 4);
sSql.Format(_T("INSERT INTO log (%s, %s, %s, %s, %s) values('%s', '%s', '%s', '%s', '%s')"),
str0, str1, str2, str3, str4, str5, str6, str7, str8, str9);
database.ExecuteSQL(sSql);
}
//关闭xls数据库
database.Close();
}
catch(...)
{
//提示excel操作出现异常
strCaption.LoadString(IDS_MESSAGEBOX_CAPTION);
strMsg.LoadString(IDS_EXCEL_OPENFILE_FAILED);
MessageBoxDLg(strMsg, strCaption, MB_OK | MB_ICONERROR, this);
return fail;
}
return success;
}
int32_t CLogPageDlg::ExportToXLS(CString& strFilePath) { CDatabase database; CString sDriver = _T("MICROSOFT EXCEL DRIVER (*.XLS)"); // Excel安装驱动 CString sSql; CString strCaption, strMsg; try { //检测是否安装了excel驱动程序 if (!CheckExcelDriver()) { strCaption.LoadString(IDS_MESSAGEBOX_CAPTION); strMsg.LoadString(IDS_EXCEL_DRIVER_FAILED); MessageBoxDLg(strMsg, strCaption, MB_OK | MB_ICONERROR, this); return fail; } //创建excel连接字符串 sSql.Format(_T("DRIVER={%s};DSN='';FIRSTROWHASNAMES=1;READONLY=FALSE;CREATE_DB=\"%s\";DBQ=%s"), sDriver, strFilePath, strFilePath); //打开xls文件失败,成功则创建xls数据库文件 if(!database.OpenEx(sSql, CDatabase::noOdbcDialog)) { strCaption.LoadString(IDS_MESSAGEBOX_CAPTION); strMsg.LoadString(IDS_OPEN_EXCEL_FAILED); MessageBoxDLg(strMsg, strCaption, MB_OK | MB_ICONERROR, this); return fail; } //创建表 CString str0, str1, str2, str3, str4; str0.LoadString(IDS_COME); str1.LoadString(IDS_TIME); str2.LoadString(IDS_USERS); str3.LoadString(IDS_CONTENT); str4.LoadString(IDS_REMAKE); sSql.Format(_T("CREATE TABLE log (%s TEXT, %s TEXT, %s TEXT, %s TEXT, %s TEXT)"), str0, str1, str2, str3, str4); database.ExecuteSQL(sSql); //循环导入数据 int32_t i = 0, j = 0; CString str5, str6, str7, str8, str9; int32_t nCount = m_logList.GetItemCount(); for (i = 0; i < nCount; i++) { str5 = m_logList.GetItemText(i, 0); str6 = m_logList.GetItemText(i, 1); str7 = m_logList.GetItemText(i, 2); str8 = m_logList.GetItemText(i, 3); str9 = m_logList.GetItemText(i, 4); sSql.Format(_T("INSERT INTO log (%s, %s, %s, %s, %s) values('%s', '%s', '%s', '%s', '%s')"), str0, str1, str2, str3, str4, str5, str6, str7, str8, str9); database.ExecuteSQL(sSql); } //关闭xls数据库 database.Close(); } catch(...) { //提示excel操作出现异常 strCaption.LoadString(IDS_MESSAGEBOX_CAPTION); strMsg.LoadString(IDS_EXCEL_OPENFILE_FAILED); MessageBoxDLg(strMsg, strCaption, MB_OK | MB_ICONERROR, this); return fail; } return success; }
[cpp]
view plain
copy
print?
BOOL CLogPageDlg::CheckExcelDriver()
{
TCHAR szBuf[2001] = {0};
WORD cbBufMax = 2000;
WORD cbBufOut = 0;
TCHAR *pszBuf = szBuf;
//获取已安装驱动的名称
if (!SQLGetInstalledDrivers(szBuf, cbBufMax, &cbBufOut))
{
return FALSE;
}
//查找excel
while (_tcslen(pszBuf) > 0)
{
if (NULL != _tcsstr(pszBu
b9f9
f, _T("Excel")))
{
return TRUE;
}
pszBuf += _tcslen(pszBuf) + 1;
}
return FALSE;
}
BOOL CLogPageDlg::CheckExcelDriver() { TCHAR szBuf[2001] = {0}; WORD cbBufMax = 2000; WORD cbBufOut = 0; TCHAR *pszBuf = szBuf; //获取已安装驱动的名称 if (!SQLGetInstalledDrivers(szBuf, cbBufMax, &cbBufOut)) { return FALSE; } //查找excel while (_tcslen(pszBuf) > 0) { if (NULL != _tcsstr(pszBuf, _T("Excel"))) { return TRUE; } pszBuf += _tcslen(pszBuf) + 1; } return FALSE; }
相关文章推荐
- MFC学习之 将 list 表里的信息写入.txt文本 和 .xls EXCEL 文件中
- 【一步一步学习VBA】Excel VBA 读取txt文件并写入Excel单元格(友好版)
- Python 读取EXCEL(XLS、CSV)写入txt文件
- 【一步一步学习VBA】Excel VBA 读取txt文件并写入Excel单元格
- .Net 下使用ODBC连接xls文件写入大文本的解决办法
- 将特定格式的TXT数据文件写入EXCEL
- asp.net从数据库导出数据到word、excel、txt文本文件
- VSS时,编译报错:未能向文件“.csproj.FileListAbsolute.txt”写入
- JAVA读取WORD,EXCEL,PDF,TXT,RTF,HTML文件文本内容的方法示例
- JAVA读取WORD,EXCEL,PDF,TXT,RTF,HTML文件文本内容的方法示例
- MFC读取TXT文件,写入编辑框
- JAVA读取WORD,EXCEL,PDF,TXT,RTF,HTML文件文本内容的方法
- 使用作业,每天定时将DB中信息导出到指定的文件夹中txt文本中(文件格式按照时间)
- 将大量有规律txt文本数据转换成xml格式,在导入excel,生成excel文件,在导入spass中,对数据进行分析
- VS.net VSS时,编译报错:未能向文件“.csproj.FileListAbsolute.txt”写入命令行 对路径 的访问被拒绝。
- C#写入TXT文本文件
- 未能向文件“.csproj.FileListAbsolute.txt”写入命令行 对路径 的访问被拒绝。2008年05月27日 星期二 下午 05:16
- JAVA读取WORD,EXCEL,PDF,TXT,RTF,HTML文件文本内容的方法示例
- txt,doc,xls等文本类型的文件,怎样才能直接下载
- 未能向文件“....csproj.FileListAbsolute.txt”写入命令行,对路径的访问被拒绝