您的位置:程序门 -> .net技术 -> asp.net



[100分]导出excel丢失css文件的问题


[收藏此页] [打印本页]选择字色:背景色:字体:[][][]


[100分]导出excel丢失css文件的问题[已结贴,结贴人:ivy_zheng]
发表于:2007-07-07 23:58:28 楼主
提的问题总是少有人回复,也在前面加个[100分],呵呵。

导出excel时,如果页面使用了css文件,或者使用了skin,在打开excel后,数据显示之前,总是出个对话框,提示丢失文件。列的那几个文件都是css文件。
不知道大家是否遇到过这个问题?如何解决?

导出是在服务器端先生成文件,然后传到客户端。代码如下:

///   <summary>
///   导出文件
///   </summary>
///   <param   name= "p "> 页面引用 </param>
///   <param   name= "res "> </param>
///   <param   name= "filename "> 文件名 </param>
///   <param   name= "t "> 表格引用 </param>
///   <param   name= "strtype "> 文档类别:excel,   word,   txt,   html </param>
static   public   void   exportto(page   p,   httpresponse   res,   string   filename,   table   t,   string   strtype)
{
//   文档类型,字符编码
res.clear();
res.buffer   =   true;
res.charset   =   "utf-8 ";

//   文件名称
res.appendheader( "content-disposition ",   string.format( "attachment;filename={0} ",   filename));
res.contentencoding   =   system.text.encoding.getencoding( "utf-8 ");

//   文档类型
res.contenttype   =   string.format( "application/ms-{0} ",   strtype);;
p.enableviewstate   =   false;

//   输入流
system.io.stringwriter   iowriter   =   new   system.io.stringwriter();
htmltextwriter   htmlwriter   =   new   htmltextwriter(iowriter);

//   目标绑定到输入流输出
t.rendercontrol(htmlwriter);
res.write(iowriter.tostring());
res.end();
}
发表于:2007-07-08 00:04:251楼 得分:0
好像帖子看不到,自己顶一下先
发表于:2007-07-08 00:38:492楼 得分:8
红星的问题没权力回答,只有顶的份了
发表于:2007-07-08 01:05:073楼 得分:0
今天看来等不到答案了
发表于:2007-07-08 11:03:284楼 得分:8
红星的问题没权力回答,只有顶的份了     jf
发表于:2007-07-08 13:12:215楼 得分:8
lz,您说的不明不白,是在讨论还是在自己问自己。???
发表于:2007-07-08 22:15:046楼 得分:0
ls,我碰到这个问题,找解决办法。
如果后台生成excel,而且用了css文件,应该都出这个问题的。
发表于:2007-07-08 22:50:177楼 得分:12
此类的应该直接用style= " "来设置样式,因为你用外部的css你没有导出
发表于:2007-07-08 23:07:478楼 得分:8
.css   没有导出来
发表于:2007-07-09 01:28:469楼 得分:0
我已经知道是外部css没有导出来,有什么办法可以导出来(应该是转换为内部的)。

我的页面是自动生成的table,用theme只要动态制定tablerow或tablecell的cssclass属性就可以了,如果改成设置它们的font-size之类的,就麻烦大了。
发表于:2007-07-09 08:29:5010楼 得分:8
写法没有错,我也是这样写的:

response.clear();
response.buffer   =   true;
response.charset   =   "utf-8 ";

response.appendheader( "content-disposition ",   "attachment;filename= "   +   excelname);
response.contentencoding   =   system.text.encoding.getencoding( "utf-8 ");
response.contenttype   =   "application/ms-excel ";
this.enableviewstate   =   false;

system.io.stringwriter   sw   =   new   system.io.stringwriter();
system.web.ui.htmltextwriter   hw   =   new   system.web.ui.htmltextwriter(sw);

rptmaster.rendercontrol(hw);

response.write(sw.tostring);
response.end();

不知道搂主的p、res是怎么定义的?
发表于:2007-07-09 08:31:5711楼 得分:8
另外,我也是引用的外部css文件:
<link   href= "../css/main.css "   type= "text/css "   rel= "stylesheet ">
发表于:2007-07-09 08:41:0612楼 得分:8
导入代码没错~

lz   是否在导出后提示用户   导入成功这样的提示框弹出`

如果是在弹出提示后   页面部分样式丢失的话

那先查看弹出页面后   右键查看源代码       看看文本内最顶端是否出现   alert( '提示信息 ')
这样的脚本代码~

如果有   解决方案:     要在提示框提示用户前   就加载完样式       可以在body任意位置放个lable或者其他显示控件text属性       如lable.text= " <script> alert( '提示信息! ') </script> ";
发表于:2007-07-09 08:44:4313楼 得分:8
提示信息一定要保持在加载css之后提示
不然部分样式是会丢失的
发表于:2007-07-09 10:02:1414楼 得分:8
顶了
发表于:2007-07-09 10:14:1215楼 得分:16
string   tmp   =   ostringwriter.tostring();

tmp   =   tmp.replace( "\r ", " ");
tmp   =   tmp.replace( "\t ", " ");
tmp   =   tmp.replace( "\n ", " ");
string   s_mc= " ";
matchcollection   mc2   =   regex.matches(tmp,@ " <link\shref(? <qy> .*)mytitle8 ",regexoptions.ignorecase);
foreach   (match   match23   in   mc2)  
{
s_mc=match23.groups[ "qy "].value.tostring();
}
tmp   =   tmp.replace(s_mc, " ");
tmp   =   tmp.replace( " <link   href ", " ");
tmp   =   " <tableid=\ " "+tmp;
tmp   =   tmp.replace( " <table   id=\ "mytitle8\ "   width=\ "100%\ " ", " <table   id   =mytitle8   width=1620   ");

之前做的一个,导出之前,可以用正则,或纯的replace   将不用导出的html代码替换为空即可.
html是生成页面之后的html,右键查看代码到dreamweaver中分析,取之精华,弃去糟粕.

请各位批证指证
发表于:2007-07-09 10:18:2116楼 得分:0
注:excel的导出最多只能导出65536行,256列,不然会报错的,


快速检索

最新资讯
热门点击