以文本方式查看主题

-  Foxtable(狐表)  (http://www.foxtable.com/bbs/index.asp)
--  专家坐堂  (http://www.foxtable.com/bbs/list.asp?boardid=2)
----  [求助]用VBA保存的Excel报表导入错误  (http://www.foxtable.com/bbs/dispbbs.asp?boardid=2&id=57951)

--  作者:cherryjing
--  发布时间:2014/10/9 9:04:00
--  [求助]用VBA保存的Excel报表导入错误
由于项目要求的报表的特殊性,很难用FOXTABLE的EXCEL模板的办法来做,于是采用了VBA来做导出报表,为求兼容性,导出为xls格式,而当我导入该文件时,开始也用VBA的方法,可是读取单元格值的时候总是失败,如下:

Dim Wb As MSExcel.Workbook = App.WorkBooks.Open(g_strExcelFileName)
Dim Ws As MSExcel.WorkSheet = Wb.WorkSheets(g_strExcelWookSheetName)
Dim Rg As MSExcel.Range = Ws.Range(strRg) \'strRg = "H1:H2"
Dim strValue as string = CStr(Rg.Value)
无论加不加那个CStr类型转换函数,运行到这句就会出错,没办法,我又使用
    Dim Book As New XLS.Book(g_strExcelFileName)
    Dim Sheet As XLS.Sheet = Book.Sheets(g_strExcelWookSheetName)
方法试图读取该文件,可每当运行到第一句就出错,
图片点击可在新窗口打开查看此主题相关图片如下:1.bmp
图片点击可在新窗口打开查看
可当我把那个文件用EXCEL打开并另存为xlsx后,就可以成功读取内容,请版主指教这个问题该如何解决?我装的是office2010。
本来想把导出的文件默认后缀改成xlsx,但考虑到当最后完成发布后,由于不知道最终使用我的软件的机器是装的OFFICE的哪个版本,所以最终没改。


--  作者:cherryjing
--  发布时间:2014/10/9 9:05:00
--  
在打开文件之前已经检查过文件存在且未被打开
--  作者:有点甜
--  发布时间:2014/10/9 9:21:00
--  

1、明显是路径有错,你弹出路径看一下;

 

2、不能重复打开excel,用vba打开以后,必须关闭,才能再次打开。


--  作者:cherryjing
--  发布时间:2014/10/9 9:46:00
--  
路径看过没问题,而且肯定是关闭了的。其实那段代码是这样的:
If FileSys.FileExists(g_strExcelFileName) Then
    If FileIsOpened(g_strExcelFileName)= True Then
        MessageBox.Show("文件已经打开", "ReadFromExcel")
        return
    End If
    
    Dim Book As New XLS.Book(g_strExcelFileName)
    Dim Sheet As XLS.Sheet = Book.Sheets(g_strExcelWookSheetName)
......
end if

--  作者:有点甜
--  发布时间:2014/10/9 9:49:00
--  

 那就不可能,例子发上。


--  作者:cherryjing
--  发布时间:2014/10/9 12:13:00
--  
我装的是OFFICE2010,会不会和OFFICE版本有关系?
 下载信息  [文件大小:   下载次数: ]
图片点击可在新窗口打开查看点击浏览该文件:a1.xls
 下载信息  [文件大小:   下载次数: ]
图片点击可在新窗口打开查看点击浏览该文件:测试_201410091038.zip
操作说明:
先点“...”按钮选择文件,工作表会自动列在LISTBOX里,然后选择某个工作表,再点“导入”

[此贴子已经被作者于2014-10-9 12:15:17编辑过]

--  作者:有点甜
--  发布时间:2014/10/9 14:06:00
--  
 看了一下,你的这个a1文件,我打开有问题,提示错误,而且乱码,你尝试重装office吧
--  作者:cherryjing
--  发布时间:2014/10/9 14:23:00
--  
可是我打开是OK的,而且可以另存为XLSX,我装的是OFFICE2010,是不是OFFICE版本问题?
而且用VBA打开时也没有出错,只是到读单元格时读不出来
Dim Wb As MSExcel.Workbook = App.WorkBooks.Open(g_strExcelFileName)
Dim Ws As MSExcel.WorkSheet = Wb.WorkSheets(g_strExcelWookSheetName)
Dim Rg As MSExcel.Range = Ws.Range(strRg) \'strRg = "H1:H2"
Dim strValue as string = CStr(Rg.Value)‘运行到这一句时才会出错
要不版主指教一下该如何取得单元格的字符串值?
[此贴子已经被作者于2014-10-9 14:54:47编辑过]

--  作者:有点甜
--  发布时间:2014/10/9 14:29:00
--  
 你的后缀名,本身就是xlsx的,不能直接改成xls啊,如果要改成xls,就必须另存为,选择97-2003格式。
--  作者:cherryjing
--  发布时间:2014/10/9 14:59:00
--  
因为那个文件我是用VBA做的导出,在生成文件名时写的是xls,不是手工改的,你是说我用VBA保存EXCEL时就应该保存为xlsx?