以文本方式查看主题 - Foxtable(狐表) (http://foxtable.net/bbs/index.asp) -- 专家坐堂 (http://foxtable.net/bbs/list.asp?boardid=2) ---- [求助]用VBA保存的Excel报表导入错误 (http://foxtable.net/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版本有关系?
操作说明: 先点“...”按钮选择文件,工作表会自动列在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? |