用对话框的方式打开EXCEL文件成功,通过INI获取文件路径打开报错

yyang0514 2018-11-14 04:12:30
开发环境:V2013 多字节编码
现象:
1. 通过对话框获取文件的绝对路径,excel文件打开正常,当config_flag为0时,对话框模式打开正常。
2.通过读取INI文件,EXCEL打开时提示 文件名有乱码,导致打开异常。
3.通过debug发现文件名通过INI读取时为正常,当执行EXCEL打开是就变乱了。
debug模式下错误如下图

release模式下错误如下图

请帮我查看一下。
程序代码如下:

void CShowJpgDlg::OnMemberDoc()
{

if (!config_flag)
{
CFileDialog* lpszOpenFile;
vec.clear();
lpszOpenFile = new CFileDialog(TRUE, "", "", OFN_FILEMUSTEXIST | OFN_HIDEREADONLY, "Excel File(*.xlsx;*.xls)|*.xls;*.xlsx", NULL);
if (lpszOpenFile->DoModal() == IDOK)
{
szGetName = lpszOpenFile->GetPathName();
//SetWindowText(szGetName);
if (!config_flag)
{
::WritePrivateProfileString("SETTING", "memberinfo", szGetName.GetBuffer(szGetName.GetLength()), configpath.GetBuffer(configpath.GetLength()));

}
//delete lpszOpenFile;
}
else
{
return;
}
}
else
{
//szGetName 定义为CString
::GetPrivateProfileString("SETTING", "memberinfo", "Error", szGetName.GetBuffer(MAX_PATH), MAX_PATH, configpath);
if (szGetName == "Error")
{
MessageBox("图片路径出错,请删除程序路径下的config.ini文件,并重启");
}
}
//文件中包含多个sheet时,默认打开第一个sheet
CExport2Excel Excel_example;
Excel_example.OpenExcel(szGetName);
//Excel_example.SetSheet(0);
//获取sheet个数
int iSheetNum = Excel_example.GetSheetsNumber();
//获取已使用表格行列数
int iRows = Excel_example.GetRowCount();//iRows 获取不正常
int iCols = Excel_example.GetColCount();
for (int i = 2; i <= iRows; i++)//第一行为表头
{
MemberInfo *member = new MemberInfo;
member->setInfo(i-1, Excel_example.GetText(i, 2), Excel_example.GetText(i, 3));
vec.push_back(*member);
}
Excel_example.Close();

}
...全文
129 7 打赏 收藏 转发到动态 举报
写回复
用AI写文章
7 条回复
切换为时间正序
请发表友善的回复…
发表回复
yyang0514 2018-11-15
  • 打赏
  • 举报
回复
引用 2 楼 zgl7903 的回复:
Excel_example.OpenExcel(szGetName); 之前设置断点查看文件名路径是否正常
估计是含有中文 而系统设置的非Unicode的代码页不是中文 或两者不符


问题已经解决。解决方法比较狗血。
函数中调用下层的函数定义为Open(LPCTSTR Filename),实际传送的为m_wbExcels.Open(sExcelFile.GetBuffer())
修订为m_wbExcels.Open(sExcelFile).
但是不明白的LPCTSTR ,sExcelFile.GetBuffer()返回PXSTR,CString的关系。
要是编译能报错,也至少能早点发现
赵4老师 2018-11-15
  • 打赏
  • 举报
回复
对电脑而言没有乱码,只有二进制字节;对人脑才有乱码。啊 GBK:0xB0 0xA1,Unicode-16 LE:0x4A 0x55,Unicode-16 BE:0x55 0x4A,UTF-8:0xE5 0x95 0x8A
yyang0514 2018-11-14
  • 打赏
  • 举报
回复
引用 3 楼 yyang0514 的回复:
[quote=引用 1 楼 youyingbo 的回复:]
config_flag为1时,读出来的文件路径名是什么??
系统支持中文吗?
或者文件路径名有空格吗?
excel文件起个英文名,放在D盘根目录行吗?

F:\code\vc10 project\ShowJpg\test.xlsx,确实有空格。[/quote]
尝试了找了个处理空格的方法:
str1="c:\\program files\\123.jpg";
str="\""+str+"\""; 提示未无法找到"".xlsx文件
另外试了将所有文件放置到没有空格的文件路径中,仍然会报错。
假如将excel放在 f:\\code 路径下,release 版本提示无找到f.xlsx
yyang0514 2018-11-14
  • 打赏
  • 举报
回复
引用 2 楼 zgl7903 的回复:
Excel_example.OpenExcel(szGetName); 之前设置断点查看文件名路径是否正常
估计是含有中文 而系统设置的非Unicode的代码页不是中文 或两者不符

在断点前文件名称是对的,执行 Excel_example.OpenExcel(szGetName)就变了。
文件名称为F:\code\vc10 project\ShowJpg\test.xlsx,有空格。
我也尝试了将项目设置为UNICODE,但是包含的excel相关的支持文件编译不过。
yyang0514 2018-11-14
  • 打赏
  • 举报
回复
引用 1 楼 youyingbo 的回复:
config_flag为1时,读出来的文件路径名是什么??
系统支持中文吗?
或者文件路径名有空格吗?
excel文件起个英文名,放在D盘根目录行吗?

F:\code\vc10 project\ShowJpg\test.xlsx,确实有空格。
zgl7903 2018-11-14
  • 打赏
  • 举报
回复
Excel_example.OpenExcel(szGetName); 之前设置断点查看文件名路径是否正常
估计是含有中文 而系统设置的非Unicode的代码页不是中文 或两者不符




tiger波波 2018-11-14
  • 打赏
  • 举报
回复
config_flag为1时,读出来的文件路径名是什么?? 系统支持中文吗? 或者文件路径名有空格吗? excel文件起个英文名,放在D盘根目录行吗?

16,472

社区成员

发帖
与我相关
我的任务
社区描述
VC/MFC相关问题讨论
社区管理员
  • 基础类社区
  • Web++
  • encoderlee
加入社区
  • 近7日
  • 近30日
  • 至今
社区公告

        VC/MFC社区版块或许是CSDN最“古老”的版块了,记忆之中,与CSDN的年龄几乎差不多。随着时间的推移,MFC技术渐渐的偏离了开发主流,若干年之后的今天,当我们面对着微软的这个经典之笔,内心充满着敬意,那些曾经的记忆,可以说代表着二十年前曾经的辉煌……
        向经典致敬,或许是老一代程序员内心里面难以释怀的感受。互联网大行其道的今天,我们期待着MFC技术能够恢复其曾经的辉煌,或许这个期待会永远成为一种“梦想”,或许一切皆有可能……
        我们希望这个版块可以很好的适配Web时代,期待更好的互联网技术能够使得MFC技术框架得以重现活力,……

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