[100分]导出Excel丢失css文件的问题
提的问题总是少有人回复,也在前面加个[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();
}
[解决办法]
红星的问题没权力回答,只有顶的份了
[解决办法]
红星的问题没权力回答,只有顶的份了 JF
[解决办法]
LZ,您说的不明不白,是在讨论还是在自己问自己。???
[解决办法]
此类的应该直接用style= " "来设置样式,因为你用外部的CSS你没有导出
[解决办法]
.css 没有导出来
[解决办法]
写法没有错,我也是这样写的:
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是怎么定义的?
[解决办法]
另外,我也是引用的外部CSS文件:
<LINK href= "../CSS/Main.css " type= "text/css " rel= "stylesheet ">
[解决办法]
导入代码没错~
LZ 是否在导出后提示用户 导入成功这样的提示框弹出`
如果是在弹出提示后 页面部分样式丢失的话
那先查看弹出页面后 右键查看源代码 看看文本内最顶端是否出现 alert( '提示信息 ')
这样的脚本代码~
如果有 解决方案: 要在提示框提示用户前 就加载完样式 可以在body任意位置放个lable或者其他显示控件text属性 如lable.text= " <script> alert( '提示信息! ') </script> ";
[解决办法]
提示信息一定要保持在加载CSS之后提示
不然部分样式是会丢失的
[解决办法]
顶了
[解决办法]
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中分析,取之精华,弃去糟粕.
请各位批证指证