为了得到工作薄列表,同样的两段代码,为什么在VB6下和VB2013下结果不同
VB6下:正确得到结果CommonDialog1.Flags = cdlOFNHideReadOnly
CommonDialog1.Filter = "All Files (*.*)|*.*|Excel文件" & "(*.xls)|*.xls|"
CommonDialog1.FilterIndex = 2
CommonDialog1.ShowOpen
Dim y As Boolean
Dim listcount As Integer, handle As Integer
Dim List() As String
y = fpSpread1.GetExcelSheetList(CommonDialog1.FileName, List, listcount, App.Path & "\log.txt", handle, True)
ReDim List(listcount - 1)
y = fpSpread1.GetExcelSheetList(CommonDialog1.FileName, List, listcount, App.Path & "\log.txt", handle, False)
For i = 0 To listcount - 1
Combo1.AddItem (List(i))
Next i
在Combo1控件中得到正确的工作薄列表
--------------------------------------------------------------------------------------------------------------
VB2013下:在向TSComboBox1添加内容时错误
OpenFileDialog1.Filter = "Excel 文件 (*.xls)|*.xls|所有文件 (*.*)|*.*"
OpenFileDialog1.FilterIndex = 1
If OpenFileDialog1.ShowDialog() = DialogResult.OK Then
Dim y, z
Dim listcount As Integer, handle As Integer
Dim List()
Dim i
ReDim List(1)
y = AxfpSpread1.GetExcelSheetList(OpenFileDialog1.FileName, List, listcount, Application.StartupPath & "\log.txt", handle, True)
ReDim List(listcount - 1)
y = AxfpSpread1.GetExcelSheetList(OpenFileDialog1.FileName, List, listcount, Application.StartupPath & "\log.txt", handle, False)
For i = 0 To listcount - 1
TSComboBox1.Items.Add(List(i)) '执行到这一步时,显示错误:值不能为 null。
Next i
--------------------------------------------------------------------------------------------------------------------
为什么呢?同样的段子,我拿到VB6下执行正确,但在VB2013下就是不行。 回复 1楼randomcic的帖子
你在代码里打开了一个excel文件,使用GetExcelSheetList方法的时候,对excel文件的格式是有要求的。
如果文件是 BIFF8 格式的excel文件,那么可以使用GetExcelSheetList方法导入。
如果文件是xlsx文件,那么要使用OpenExcel2007File方法,导入xlsx格式文件。
如果文件不是之前提到的这两种类型,那么spread不能导入文件。
所以List添加的项目会是null。
VisualStudio里,语法规定,ComboBox的Items不能添加null的项目,因此会报错。
在使用这个方法的时候,请参考文档:
http://helpcentral.componentone.com/NetHelp/Spread8/WebSiteHelp/add_da22.html ---------以下的问题是一个初学者的提问,有问得让人发笑的地方,还望不吝赐教-----------
我使用的是 spread 8.0for ActiveX ,为什么两个不同的环境下(VB6和VB2013)下打开同样的文件,VB6下打开正常,VB2013下却总是返回"null“,取不到工作薄的名呢。
楼上您所说的excel格式我不懂,我目前可以使用的格式是excel2003的.xls和2007的.xlsx这两种格式所属的是您所说的哪一种类型呢?
如果必须使用您所说的BIFF8 这种格式的excel文件,我使用的excel,应该使用哪个版本的来保存成这种格式的xls文件,请详细说明。
另外在for activeX下的spread 是没有openexcel这个方法的。 回复 3楼randomcic的帖子
不太清楚你的excel文件具体是什么格式。仅从你的描述来看,你的两个excel文件格式是不一致的。一个是.xls文件,另一个是.xlsx文件。
如果你自己不能判断,那么使用GetExcelSheetList方法之前,可以添加判断IsExcelFile方法,如果是True,就可以使用GetExcelSheetList方法。否则使用IsExcel2007File方法判断是不是.xlsx后缀名的文件,然后使用 OpenExcel2007File方法。
有关 OpenExcel2007File方法的文档请参考:
http://helpcentral.componentone.com/NetHelp/Spread8/WebSiteHelp/funct278.html#1410199
我也已经在VisualStudio VB和VB6.0下测试过,没有重现你提到的方法不存在的问题。
特别注意的是:在VisualStudio VB下使用GetExcelSheetList方法,获取到的List(0)为null。
这个问题我已经提交到产品组进行确认。
目前来说,给你提供的解决方法,只有先通过导入读取excel文件,然后通过fpspread.SheetName获取文件名。
代码参考:
Dim y As Boolean, z As Boolean
Dim Var As Object
Dim x As Integer, listcount As Integer, handle As Integer
Dim List(10) As String
If (OpenFileDialog1.ShowDialog() = Windows.Forms.DialogResult.OK) Then
' Check if file is an Excel file and set result to x
x = fpSpread1.IsExcelFile(OpenFileDialog1.FileName)
' If file is Excel file, tell user, import sheet
' list, and set result to y
If x = 1 Then
MsgBox("File is an Excel file.", , "File Type")
y = fpSpread1.GetExcelSheetList(OpenFileDialog1.FileName, List, listcount, "C:\ILOGFILE.TXT", handle, True)
ReDim List(listcount)
' If received sheet list, tell user, import file,
' and set result to z
If y = True Then
MsgBox("Got sheet list.", , "Status")
z = fpSpread1.ImportExcelSheet(handle, 0)
MsgBox(fpSpread1.SheetName, , "Result")
' Tell user result based on T/F value of z
If z = True Then
MsgBox("Import complete.", , "Result")
Else
MsgBox("Import did not succeed.", , "Result")
End If
Else
' Tell user cannot obtain sheet list
MsgBox("Cannot return information for Excel file.", , "Result")
End If
Else
' Tell user file is not Excel file or is locked
MsgBox("File is not an Excel file or is locked and cannot be imported.", , "Invalid File Type or Locked")
End If
End If
页:
[1]