首页 新闻 会员 周边

怎样把word类型的数据,在不下载到本地的基础上打开

0
悬赏园豆:60 [已关闭问题] 关闭于 2012-07-27 10:10
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);
            }

上面的代码是先下载到桌面,有什么办法,在不下载到本地,直接打开,然后另存到本地???

紫砂清壶的主页 紫砂清壶 | 初学一级 | 园豆:4
提问于:2012-07-12 20:20
< >
分享
所有回答(2)
0

很简单,word可以一个docx的文件时,这个文件可以在本地上,也可以在一个url上,比如 http://www.aaa.com/abc.docx 这样的url,所以通过asp.net来重写.docx的handler,在用户请求类似url的时候,从数据库取出二进制流直接发送给word就好了,不知道你熟悉不熟悉sharepoint,sharepoint里面就是这么干的,它里面的word文件都是存到数据库的,然后可以在word中直接打开。

ocean | 园豆:824 (小虾三级) | 2012-07-13 08:46

我对sharepoint不怎么了解,能否给出类似的代码???

支持(0) 反对(0) 紫砂清壶 | 园豆:4 (初学一级) | 2012-07-13 09:03
0

试试这里(open excel workbook from memorystream)提到的方法,用MemoryStream+SpreadSheetDocument:

MemoryStream ms = new MemoryStream(fileArray);
var doc = SpreadSheetDocument.Open(ms, isEditable);
dudu | 园豆:31003 (高人七级) | 2012-07-13 09:24

SpreadSheetDocument不能解析???

支持(0) 反对(0) 紫砂清壶 | 园豆:4 (初学一级) | 2012-07-13 10:46

@紫砂清壶: 需要引用DocumentFormat.OpenXml.dll

支持(0) 反对(0) dudu | 园豆:31003 (高人七级) | 2012-07-13 10:50

@dudu: 需要从网上下吗?我在.net,com里都没找到???

支持(0) 反对(0) 紫砂清壶 | 园豆:4 (初学一级) | 2012-07-13 10:53

@紫砂清壶: 要下载Open XML SDK,参考文章:

Using C# and Open XML SDK 2.0 for Microsoft Office to Create an Excel 2007 Document

支持(0) 反对(0) dudu | 园豆:31003 (高人七级) | 2012-07-13 11:00

@dudu: 太高深了。。。呵呵

支持(0) 反对(0) 紫砂清壶 | 园豆:4 (初学一级) | 2012-07-13 11:07

支持(0) 反对(0) 紫砂清壶 | 园豆:4 (初学一级) | 2012-07-13 11:24

@dudu:

支持(0) 反对(0) 紫砂清壶 | 园豆:4 (初学一级) | 2012-07-13 11:25

@紫砂清壶: 

在SpreadsheetDocument.Open之前加上代码:

ms.Write(fileByte, 0, (int)fileByte.Length);
支持(0) 反对(0) dudu | 园豆:31003 (高人七级) | 2012-07-13 11:40

@dudu: 还是同样的错误

支持(0) 反对(0) 紫砂清壶 | 园豆:4 (初学一级) | 2012-07-13 11:41

@紫砂清壶: MemoryStream要放在using中

支持(0) 反对(0) dudu | 园豆:31003 (高人七级) | 2012-07-13 11:44

@dudu: 还是一样的错误

支持(0) 反对(0) 紫砂清壶 | 园豆:4 (初学一级) | 2012-07-13 11:46

@dudu:能否远程帮我调试一下??? 

支持(0) 反对(0) 紫砂清壶 | 园豆:4 (初学一级) | 2012-07-13 11:55

@紫砂清壶: 你再试试,相信你自己能解决这个问题

支持(0) 反对(0) dudu | 园豆:31003 (高人七级) | 2012-07-13 13:07

@紫砂清壶: dudu提供的这个只支持office2007之后的,你的版本是什么?

支持(0) 反对(0) 逐风者 | 园豆:155 (初学一级) | 2012-07-13 13:26

@逐风者: 我的是2010的

支持(0) 反对(0) 紫砂清壶 | 园豆:4 (初学一级) | 2012-07-13 13:51
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: 

支持(0) 反对(0) 紫砂清壶 | 园豆:4 (初学一级) | 2012-07-13 13:58

@紫砂清壶: 

SpreadsheetDocument 是用来操作Excel地,你用它打开Word Stream,当然是这个错误了,操作Word应该用Package类。
支持(0) 反对(0) 博爸 | 园豆:220 (菜鸟二级) | 2012-07-14 22:59

@shalongbus: ,能不能给出具体的代码???谢谢

支持(0) 反对(0) 紫砂清壶 | 园豆:4 (初学一级) | 2012-07-15 20:41
清除回答草稿
   您需要登录以后才能回答,未注册用户请先注册