积极答复者
FpSpread.OpenExcel 方法 (Stream),无法从内存流打开文件?

问题
-
1、有一个xls文件存储在ACCESS数据库的ole字段“结算单存储路径”中
2、首先我尝试从文件流打开文件:
Private Sub Button2_Click(ByVal sender As System.Object, ByVal e As System.EventArgs) Handles Button2.Click
'打开数据库连接
Dim tempConnection As New OleDb.OleDbConnection
tempConnection.ConnectionString = "Provider=Microsoft.Jet.OLEDB.4.0; Data Source=D:\Backup\我的文档\Visual Studio 2008\Projects\文件读写测试\结算计价信息系统.mdb"
tempConnection.Open()
Dim readimg As New OleDb.OleDbCommand("SELECT 结算单台账.结算单存储路径, 结算单台账.ID FROM 结算单台账 where 结算单台账.ID=109", tempConnection)
Dim rs As OleDbDataReader = readimg.ExecuteReader()
Dim xlsbyte() As Byte
While rs.Read
xlsbyte = rs("结算单存储路径")
MsgBox(rs("ID").ToString)
End While
Dim f As String
f = "C:\Documents and Settings\Administrator\桌面\19.xls"
Dim s As New System.IO.FileStream(f, IO.FileMode.Create, IO.FileAccess.ReadWrite)
s.Write(xlsbyte, 0, xlsbyte.Length)
s.Close()
Dim opf As New System.IO.FileStream(f, IO.FileMode.Open, IO.FileAccess.ReadWrite)
Try
FpSpread1.OpenExcel(opf)'结果:可以成功打开文件。
Catch ex As Exception
MessageBox.Show(ex.Message)
End Try
End Sub
[b]2、我改用从内存流来打开xls,我失败了,请教有什么办法可以解决?[/b]
Private Sub Button4_Click(ByVal sender As System.Object, ByVal e As System.EventArgs) Handles Button4.Click
'打开数据库连接
Dim tempConnection As New OleDb.OleDbConnection
tempConnection.ConnectionString = "Provider=Microsoft.Jet.OLEDB.4.0; Data Source=D:\Backup\我的文档\Visual Studio 2008\Projects\文件读写测试\结算计价信息系统.mdb"
tempConnection.Open()
Dim readimg As New OleDb.OleDbCommand("SELECT 结算单台账.结算单存储路径, 结算单台账.ID FROM 结算单台账 where 结算单台账.ID=109", tempConnection)
Dim rs As OleDbDataReader = readimg.ExecuteReader()
Dim xlsbyte() As Byte
While rs.Read
xlsbyte = rs("结算单存储路径")
MsgBox(rs("ID").ToString)
End While
Dim xlsmemory As New MemoryStream()
Try
xlsmemory.Write(xlsbyte, 0, xlsbyte.Length)
FpSpread1.Open(xlsmemory)’无法打开文件,请问怎么解决?[b][/b]
Catch ex As Exception
MessageBox.Show(ex.Message)
End Try
End Sub
答案
-
非常谢谢问题已解决
Private Sub Button3_Click(ByVal sender As System.Object, ByVal e As System.EventArgs) Handles Button3.Click Dim fileName As String fileName = "D:\Backup\我的文档\Visual Studio 2008\Projects\文件读写测试\文件读写测试\2010年后开工项目统计.xls" '读入文件数据 Dim fs = New FileStream(fileName, IO.FileMode.Open, IO.FileAccess.Read) Dim xlsData(fs.Length - 1) As Byte fs.Read(xlsData, 0, fs.Length - 1) fs.Close() Dim tempConnection As New OleDb.OleDbConnection '打开数据库连接 tempConnection.ConnectionString = "Provider=Microsoft.Jet.OLEDB.4.0; Data Source=D:\Backup\我的文档\Visual Studio 2008\Projects\文件读写测试\结算计价信息系统.mdb" tempConnection.Open() Dim cmd1 As New OleDb.OleDbCommand("INSERT INTO 结算单台账(结算单存储路径) VALUES(@Name)", tempConnection) cmd1.Parameters.Add("@Name", OleDbType.Binary) cmd1.Parameters("@Name").Value = xlsData cmd1.ExecuteNonQuery() '读数据库 Dim readimg As New OleDb.OleDbCommand("SELECT 结算单台账.结算单存储路径, 结算单台账.ID FROM 结算单台账 where 结算单台账.ID=109", tempConnection) Dim rs As OleDbDataReader = readimg.ExecuteReader() Dim xlsbyte As Byte() While rs.Read xlsbyte = rs("结算单存储路径") End While Try '控件读入内存流 Dim xlsmemory As New MemoryStream(xlsbyte) FpSpread1.OpenExcel(xlsmemory) Catch ex As Exception 'MessageBox.Show(ex.Message) End Try End Sub
- 已标记为答案 firedream 2012年2月2日 8:44
全部回复
-
xlsmemory.Write(xlsbyte, 0, xlsbyte.Length)
xlsmemory.Flush() '全部写入 xlsmemory.Position=0 '加入这句话,防止指针指向最后一个位置 FpSpread1.Open(xlsmemory)
QQ我:
下载MSDN桌面工具(Vista,Win7)
我的博客园
慈善点击,点击此处
- 已编辑 ThankfulHeartModerator 2012年1月28日 5:36
-
新年好,祝您龙年身体健康,工作蒸蒸日上。1、我按您的方法测试了程序之后,得到以上图片上的消息,我不知如何处理,烦您指教,谢谢。2、如果不加您的那两句代码
xlsmemory.Flush() '取消此语句 xlsmemory.Position=0 '取消此语句
得到的提示是“缺少根元素。
3、FpSpread.OpenExcel 方法 (Stream)
参数 说明 stream 表示指定的 Excel 文件流。
4、我现在要从内存流在控件中显示表格,那么可能需要将内存流转换成文件流。是不是必须将内存流内容创建为文件然后打开文件创建文件流才能成功呢?
- 已编辑 firedream 2012年1月29日 6:44 未取得成功
-
谢谢,我以向您递交了电子邮件,望您赐教。
对不起,我这里缺少一些必要的类库,无法运行;要不请你把类库安装程序连同项目一起打包过来,谢谢!
QQ我:
下载MSDN桌面工具(Vista,Win7)
我的博客园
慈善点击,点击此处- 已编辑 ThankfulHeartModerator 2012年1月30日 1:20
-
好的,谢谢,请进一步指教。
如果加载整个Excel,不要读取,直接尝试这样做:
byte[] bytes = System.IO.File.ReadAllBytes("c:\\try.xls");
MemoryStream ms = new MemoryStream();
ms.Write(bytes,0,bytes.Length);
ms.Flush();
FpSpread.OpenExcel(ms);
QQ我:
下载MSDN桌面工具(Vista,Win7)
我的博客园
慈善点击,点击此处- 已编辑 ThankfulHeartModerator 2012年1月31日 3:15
-
非常谢谢问题已解决
Private Sub Button3_Click(ByVal sender As System.Object, ByVal e As System.EventArgs) Handles Button3.Click Dim fileName As String fileName = "D:\Backup\我的文档\Visual Studio 2008\Projects\文件读写测试\文件读写测试\2010年后开工项目统计.xls" '读入文件数据 Dim fs = New FileStream(fileName, IO.FileMode.Open, IO.FileAccess.Read) Dim xlsData(fs.Length - 1) As Byte fs.Read(xlsData, 0, fs.Length - 1) fs.Close() Dim tempConnection As New OleDb.OleDbConnection '打开数据库连接 tempConnection.ConnectionString = "Provider=Microsoft.Jet.OLEDB.4.0; Data Source=D:\Backup\我的文档\Visual Studio 2008\Projects\文件读写测试\结算计价信息系统.mdb" tempConnection.Open() Dim cmd1 As New OleDb.OleDbCommand("INSERT INTO 结算单台账(结算单存储路径) VALUES(@Name)", tempConnection) cmd1.Parameters.Add("@Name", OleDbType.Binary) cmd1.Parameters("@Name").Value = xlsData cmd1.ExecuteNonQuery() '读数据库 Dim readimg As New OleDb.OleDbCommand("SELECT 结算单台账.结算单存储路径, 结算单台账.ID FROM 结算单台账 where 结算单台账.ID=109", tempConnection) Dim rs As OleDbDataReader = readimg.ExecuteReader() Dim xlsbyte As Byte() While rs.Read xlsbyte = rs("结算单存储路径") End While Try '控件读入内存流 Dim xlsmemory As New MemoryStream(xlsbyte) FpSpread1.OpenExcel(xlsmemory) Catch ex As Exception 'MessageBox.Show(ex.Message) End Try End Sub
- 已标记为答案 firedream 2012年2月2日 8:44