【发布时间】:2015-01-29 15:24:42
【问题描述】:
以下是导出到我的 GridView 的 Excel 格式但格式化 HTML 的代码。导出后,我需要将此文件导入仅接受原始 .xls 文件的系统。是否可以将gridview直接保存为原始.xls格式?
protected void Btn_Excel_Click(object sender, EventArgs e)
{
string kodowanie = "<meta http-equiv=\"Content-Type\" content=\"text/html; charset=utf-8\" />";
Response.ContentEncoding = System.Text.Encoding.UTF8;//aby widział polskie znaki
Response.Clear();
Response.Buffer = true;
Response.ContentType = "application/vnd.openxmlformats-officedocument.spreadsheetml.sheet";
Response.AddHeader("content-disposition", string.Format("attachment; filename={0}", "ImportWZ" + DateTime.Now.ToString() + ".xls"));
Response.Charset = "";
this.EnableViewState = false;
System.IO.StringWriter sw = new System.IO.StringWriter();
System.Web.UI.HtmlTextWriter htw = new System.Web.UI.HtmlTextWriter(sw);
if (ViewState["CheckBoxArray"] != null)
{
ArrayList CheckBoxArray = (ArrayList)ViewState["CheckBoxArray"];
string checkAllIndex = "chkAll-" + GridView1.PageIndex;
int rowIdx = 0;
for (int i = 0; i < GridView1.Rows.Count; i++)
{
GridViewRow row = GridView1.Rows[i];
row.Visible = false;
if (row.RowType == DataControlRowType.DataRow)
{
if (CheckBoxArray.IndexOf(i + 1) != -1)
{
row.Visible = true;
row.BackColor = System.Drawing.Color.White;
row.Cells[0].Visible = false;
row.Attributes.Add("class", "textmode");
rowIdx++;
}
}
}
}
GridView1.HeaderRow.Style.Add("background-color", "#003389");
GridView1.HeaderRow.Style.Add("color", "white");
GridView1.RenderControl(htw);
Response.Write(kodowanie+sw.ToString());
Response.End();
}
public override void VerifyRenderingInServerForm(System.Web.UI.Control control)
{
}
【问题讨论】:
-
EPPLUS 可以导出到 xlsx
-
它是否接受 Open Office 电子表格/Excel 2007 (.xlsx) 文件?
-
不,我说的更多。他们只接受旧的 .xls (97-2003) 格式。
-
您应该做的第一件事是对他们大喊大叫,因为他们不接受 .xlsx 文件。告诉他们不聪明,然后将他们指向使 Excel 2003 能够打开 .xlsx 文件的compatibility pack。然后,如果他们绝对不会接受 .xlsx 文件,那就再对他们大喊大叫。然后你需要找到一个转换器程序,或者 gasp 在服务器上使用 Office 互操作,微软强烈建议不要这样做,这会让你很头疼。老实说,如果我是你,我会拒绝支持 .xls。
-
另一种解决方法可能是将文件另存为 HTML,但为其提供
.xls扩展名,但每次打开文件时 Excel 都会抱怨它可能已损坏(但会停止打开它)。但是,您在如何设计它方面非常有限。而且我不会通过将 GridView 呈现为字符串来做到这一点。相反,我会使用 Razor Engine 或手动构建 HTML 字符串,这样您就可以完全控制生成的 HTML。