dataSet = SqlHelper.ExecuteDataset(SqlHelper.connStr, CommandType.StoredProcedure, procName, new SqlParameter(fieldFileName, fileName)); table = dataSet.Tables[0]; string path = @"C:\Users\Administrator\Desktop\" + fileName; foreach (DataRow row in table.Rows) { using (FileStream fs = new FileStream(path, FileMode.OpenOrCreate, FileAccess.Write)) { byte[] fileByte = (byte[])row[fieldFile]; int arraySize = fileByte.Length; fs.Write(fileByte, 0, arraySize); } Process.Start(path); }
上面的代码是先下载到桌面,有什么办法,在不下载到本地,直接打开,然后另存到本地???
很简单,word可以一个docx的文件时,这个文件可以在本地上,也可以在一个url上,比如 http://www.aaa.com/abc.docx 这样的url,所以通过asp.net来重写.docx的handler,在用户请求类似url的时候,从数据库取出二进制流直接发送给word就好了,不知道你熟悉不熟悉sharepoint,sharepoint里面就是这么干的,它里面的word文件都是存到数据库的,然后可以在word中直接打开。
我对sharepoint不怎么了解,能否给出类似的代码???
试试这里(open excel workbook from memorystream)提到的方法,用MemoryStream+SpreadSheetDocument:
MemoryStream ms = new MemoryStream(fileArray); var doc = SpreadSheetDocument.Open(ms, isEditable);
SpreadSheetDocument不能解析???
@紫砂清壶: 需要引用DocumentFormat.OpenXml.dll
@dudu: 需要从网上下吗?我在.net,com里都没找到???
@紫砂清壶: 要下载Open XML SDK,参考文章:
Using C# and Open XML SDK 2.0 for Microsoft Office to Create an Excel 2007 Document
@dudu: 太高深了。。。呵呵
@dudu:
@紫砂清壶:
在SpreadsheetDocument.Open之前加上代码:
ms.Write(fileByte, 0, (int)fileByte.Length);
@dudu: 还是同样的错误
@紫砂清壶: MemoryStream要放在using中
@dudu: 还是一样的错误
@dudu:能否远程帮我调试一下???
@紫砂清壶: 你再试试,相信你自己能解决这个问题
@紫砂清壶: dudu提供的这个只支持office2007之后的,你的版本是什么?
@逐风者: 我的是2010的
dataSet = SqlHelper.ExecuteDataset(SqlHelper.connStr, CommandType.StoredProcedure, procName, new SqlParameter(fieldFileName, fileName)); table = dataSet.Tables[0]; DataRow row = table.Rows[0]; byte[] fileByte = (byte[])row[fieldFile]; using (MemoryStream ms = new MemoryStream(fileByte)) { ms.Write(fileByte, 0, fileByte.Length); SpreadsheetDocument doc = SpreadsheetDocument.Open(ms, false); }
感觉这几句话没有错啊
@dudu:
@紫砂清壶:
SpreadsheetDocument 是用来操作Excel地,你用它打开Word Stream,当然是这个错误了,操作Word应该用Package类。
@shalongbus: ,能不能给出具体的代码???谢谢