网页打开WORD,excel

sean_zhou 2009-09-03 05:18:29
公司现在要做一个网站,有一些技术难题解决不了,我忙了半天了还没搞定,不得已来请大家帮帮忙,分我全部给你们。

就是有一些WORD,excel要显示在网页上,但是我考虑到WORD内容过多,想在用户打开网站时可直接给用户一个链接,直接打开WORD,不用把WORD的内容拷贝到网页上。现在就是如何打开存放在服务器上的WORD文件不回,实在搞不定了,请大家帮帮忙。谢谢。
...全文
3958 36 打赏 收藏 转发到动态 举报
写回复
用AI写文章
36 条回复
切换为时间正序
请发表友善的回复…
发表回复
火热huorezixin 2010-10-11
  • 打赏
  • 举报
回复
学习了
pcinter 2010-09-06
  • 打赏
  • 举报
回复
也碰到相同问题
  • 打赏
  • 举报
回复

C:\Documents and Settings\daxiang\桌面\CheckCode\WebSite\file\1.doc”不是有效的虚拟路径。
说明: 执行当前 Web 请求期间,出现未处理的异常。请检查堆栈跟踪信息,以了解有关该错误以及代码中导致错误的出处的详细信息。

异常详细信息: System.Web.HttpException: “C:\Documents and Settings\daxiang\桌面\CheckCode\WebSite\file\1.doc”不是有效的虚拟路径。

源错误:


行 17: string filepath = Server.MapPath("~/file/1.doc");
行 18: //string filepath = "~/" + Request.QueryString["~/file/1.doc"].ToString();
行 19: string fileName = Server.MapPath(filepath);
行 20: FileInfo DownloadFile = new FileInfo(fileName);
行 21: HttpResponse Response = HttpContext.Current.Response;


源文件: c:\Documents and Settings\daxiang\桌面\CheckCode\WebSite\WebOpenWord.aspx.cs 行: 19

堆栈跟踪:


[HttpException (0x80004005): “C:\Documents and Settings\daxiang\桌面\CheckCode\WebSite\file\1.doc”不是有效的虚拟路径。]
System.Web.VirtualPath.Create(String virtualPath, VirtualPathOptions options) +444
System.Web.HttpServerUtility.MapPath(String path) +89
WebOpenWord.Page_Load(Object sender, EventArgs e) in c:\Documents and Settings\daxiang\桌面\CheckCode\WebSite\WebOpenWord.aspx.cs:19
System.Web.Util.CalliHelper.EventArgFunctionCaller(IntPtr fp, Object o, Object t, EventArgs e) +13
System.Web.Util.CalliEventHandlerDelegateProxy.Callback(Object sender, EventArgs e) +43
System.Web.UI.Control.OnLoad(EventArgs e) +80
System.Web.UI.Control.LoadRecursive() +49
System.Web.UI.Page.ProcessRequestMain(Boolean includeStagesBeforeAsyncPoint, Boolean includeStagesAfterAsyncPoint) +3755



sean_zhou 2009-09-04
  • 打赏
  • 举报
回复
嗯,谢谢你哦,我想要的是GRIDVIEW这种样式的,就是添加这个链接可以直接在数据库里添加,不用去改代码,这么晚了,明天再说吧,谢谢你。
我姓区不姓区 2009-09-04
  • 打赏
  • 举报
回复
[Quote=引用 12 楼 sean_zhou 的回复:]
这个也可以打开,我试过了,不过这位朋友能否简单介绍下这个原理?还有我想把这个文件路径存放在数据库表里,到时候只需在数据库表里添加行字段就可以读出来了,不知道能否实现?因为我们公司可能需要存放很多WORD之类的文档放到网站上供用户浏览
[/Quote]

原理就是将自己设置HTTP头和文件类型,以文件流的方式输出到客户端
你要从数据库读路径,把第一句
string fileName = Server.MapPath("~/目录/word文件.doc");

改为从数据库读取就可以了
我姓区不姓区 2009-09-04
  • 打赏
  • 举报
回复
[Quote=引用 11 楼 sean_zhou 的回复:]
我就建了个.aspx网页,然后在上面拖了个button控件,在buttom_click事件里添加了这段代码,其他的不懂呢,刚找了方法,直接Response.Redirect("~/test.doc");倒可以打开,请问下上面你们给我的这些代码跟这个有什么区别么
[/Quote]

Response.Redirec直接页面跳转了,也就是说你的原页面就无法显示了
用我的方法,可以直接弹出对话框提示是打开还是保存到客户端
楼上各位试过都没问题,为什么你会出现这种错误?
你参考一下这个解决办法看看
http://blog.csdn.net/nihongyuan/archive/2007/11/07/1871249.aspx
sean_zhou 2009-09-04
  • 打赏
  • 举报
回复
这个也可以打开,我试过了,不过这位朋友能否简单介绍下这个原理?还有我想把这个文件路径存放在数据库表里,到时候只需在数据库表里添加行字段就可以读出来了,不知道能否实现?因为我们公司可能需要存放很多WORD之类的文档放到网站上供用户浏览[Quote=引用 1 楼 ojlovecd 的回复:]
C# codeusing System.IO;string fileName= Server.MapPath("~/目录/word文件.doc");
FileInfo DownloadFile=new FileInfo(fileName);
HttpResponse Response= HttpContext.Current.Response;
¡­
[/Quote]
sean_zhou 2009-09-04
  • 打赏
  • 举报
回复
我就建了个.aspx网页,然后在上面拖了个button控件,在buttom_click事件里添加了这段代码,其他的不懂呢,刚找了方法,直接Response.Redirect("~/test.doc");倒可以打开,请问下上面你们给我的这些代码跟这个有什么区别么
sean_zhou 2009-09-04
  • 打赏
  • 举报
回复
嗯。一楼的贡献最大,分也会大部分给他,大家别见怪,下面附上代码,供大家参考。
首先建一个default.aspx,里面添加一个gridview,代码如下
<asp:GridView ID="GridView1" runat="server" AutoGenerateColumns="False" DataSourceID="SqlDataSource1" Width="291px">
<Columns>
<asp:BoundField DataField="文件名" HeaderText="文件名" SortExpression="文件名" />
<asp:BoundField DataField="文件路径" HeaderText="文件路径" SortExpression="文件路径" />
<asp:HyperLinkField DataNavigateUrlFields="文件路径" DataNavigateUrlFormatString="~\detail.aspx?文件路径={0}" DataTextField="文件路径" HeaderText="链接" Target="_blank" Text="点点击查看" />

</Columns>
</asp:GridView>
<asp:SqlDataSource ID="SqlDataSource1" runat="server" ConnectionString="<%$ ConnectionStrings:su_soft_netConnectionString %>"
SelectCommand="SELECT fileName AS 文件名, file_path AS 文件路径 FROM FILE_LINK"></asp:SqlDataSource>

下面附上detail.cs的代码,这段代码完全拷贝的一楼的,谢谢一楼的朋友。
protected void Page_Load(object sender, EventArgs e)
{
string filepath ="~/" + Request.QueryString["文件路径"].ToString();
string fileName = Server.MapPath(filepath);
FileInfo DownloadFile = new FileInfo(fileName);
HttpResponse Response = HttpContext.Current.Response;
Response.Clear();
Response.ClearHeaders();
Response.Buffer = false;
Response.ContentType = "application/octet-stream";
Response.AppendHeader("Content-Disposition", "attachment;filename=" + HttpUtility.UrlEncode(Path.GetFileName(fileName), System.Text.Encoding.UTF8));
Response.AppendHeader("Content-Length", DownloadFile.Length.ToString());
Response.WriteFile(DownloadFile.FullName);
//File.Delete(fileName.ToString());

Response.Flush();

Response.End();
}
做这个还有一点,在数据库中建一张表,列名为filename,file_path,path直接写xxx.doc即可,前提是这个XXX.doc是放在网站目录下的,跟default.aspx一个目录。ConnectionStrings这个我没贴,自己可以自动生成的。
还有一点要注意的地方,就是我刚出现的问题,启动时得从default.aspx启动,从detail.aspx启动string filepath ="~/" + Request.QueryString["文件路径"].ToString();这一行会报错,我也不知道咋办,先添个异常处理。
我姓区不姓区 2009-09-04
  • 打赏
  • 举报
回复
[Quote=引用 26 楼 sean_zhou 的回复:]
嗯,先用这个吧,能实现就行,弄好这个再来学,现在又有一个问题,传过去在ASPX里面能读取到值,
Response.Write(Request.QueryString["文件路径"].ToString());
我现在.cs文件中读取值该怎么写?
[/Quote]
没看明白你啥意思
yzy8788 2009-09-04
  • 打赏
  • 举报
回复
感觉还是 ojlovecd 的方法好
robin521 2009-09-04
  • 打赏
  • 举报
回复
[Quote=引用 6 楼 mythad 的回复:]
C# codeusing System.IO;string fileName= Server.MapPath("~/目录/word文件.doc");
FileInfo DownloadFile=new FileInfo(fileName);
HttpResponse Response= HttpContext.Current.Response;
¡­
[/Quote]

就这个了
CZLJ2008 2009-09-04
  • 打赏
  • 举报
回复
很好的一个问题,帮顶!!!!
caipeng2008 2009-09-04
  • 打赏
  • 举报
回复
直接Request["文件路径"]就可以接收到了
sean_zhou 2009-09-04
  • 打赏
  • 举报
回复
嗯,先用这个吧,能实现就行,弄好这个再来学,现在又有一个问题,传过去在ASPX里面能读取到值,
Response.Write(Request.QueryString["文件路径"].ToString());
我现在.cs文件中读取值该怎么写?
我姓区不姓区 2009-09-04
  • 打赏
  • 举报
回复
为什么不用模板列?

<asp:TemplateField HeaderText="链接">
<ItemTemplate>
<a href="detail.aspx?fileName=<%# Eval("文件路径") %>" target="_blank" />
</ItemTemplate>
</asp:TemplateField>
sean_zhou 2009-09-04
  • 打赏
  • 举报
回复
自己找到方法了,呵呵,谢谢楼上各位,待会整理好 放上面供大家参考,顺便结贴。
littlegang 2009-09-04
  • 打赏
  • 举报
回复
直接链接方式,适合doc文件就在允许读取的web目录下
1楼提供的下载方式,适合文件不在允许读取的目录

lz对有些http的概念还没有搞清楚
纸纸纸纸飞飞 2009-09-04
  • 打赏
  • 举报
回复
1、一种是文件下载方式,把文件下载到本地,通过本地的word或excel程序打开显示。
2、使用weboffice或是dsoframer控件在网页上显示(也需本地office的支持).
sean_zhou 2009-09-04
  • 打赏
  • 举报
回复
直接传估计不行,这样 ,这个传带一个页面detail.aspx,但是把这一行的信息,如ID或者什么的传过去,那样在detail.aspx页面好分清调用哪个word,请教,谢谢。
加载更多回复(15)

110,533

社区成员

发帖
与我相关
我的任务
社区描述
.NET技术 C#
社区管理员
  • C#
  • Web++
  • by_封爱
加入社区
  • 近7日
  • 近30日
  • 至今
社区公告

让您成为最强悍的C#开发者

试试用AI创作助手写篇文章吧