【问题标题】:Warning : Export GridView to Excel file警告:将 GridView 导出到 Excel 文件
【发布时间】:2014-07-03 07:55:15
【问题描述】:

我有一个带有 Malty 控件和网格视图的页面。

我想将 gridview 数据导出到 excel 文件。我用这个类。

public class GridViewExportUtil
{

public static void Export(string fileName, GridView gv)
{
    HttpContext.Current.Response.Clear();
    HttpContext.Current.Response.AddHeader(
        "content-disposition", string.Format("attachment; filename={0}", fileName));
    HttpContext.Current.Response.ContentType = "application/ms-excel";

    using (StringWriter sw = new StringWriter())
    {
        using (HtmlTextWriter htw = new HtmlTextWriter(sw))
        {
            //  Create a form to contain the grid
            Table table = new Table();

            //  add the header row to the table
            if (gv.HeaderRow != null)
            {
                GridViewExportUtil.PrepareControlForExport(gv.HeaderRow);
                table.Rows.Add(gv.HeaderRow);
            }

            //  add each of the data rows to the table
            foreach (GridViewRow row in gv.Rows)
            {
                GridViewExportUtil.PrepareControlForExport(row);
                table.Rows.Add(row);
            }

            //  add the footer row to the table
            if (gv.FooterRow != null)
            {
                GridViewExportUtil.PrepareControlForExport(gv.FooterRow);
                table.Rows.Add(gv.FooterRow);
            }

            //  render the table into the htmlwriter
            table.RenderControl(htw);

            //  render the htmlwriter into the response
            HttpContext.Current.Response.Write(sw.ToString());
            HttpContext.Current.Response.Flush();
            HttpContext.Current.Response.End();
        }
    }
}

/// <summary>
/// Replace any of the contained controls with literals
/// </summary>
/// <param name="control"></param>
private static void PrepareControlForExport(Control control)
{
    for (int i = 0; i < control.Controls.Count; i++)
    {
        Control current = control.Controls[i];
        if (current is LinkButton)
        {
            control.Controls.Remove(current);
            control.Controls.AddAt(i, new LiteralControl((current as LinkButton).Text));
        }
        else if (current is ImageButton)
        {
            control.Controls.Remove(current);
            control.Controls.AddAt(i, new LiteralControl((current as ImageButton).AlternateText));
        }
        else if (current is HyperLink)
        {
            control.Controls.Remove(current);
            control.Controls.AddAt(i, new LiteralControl((current as HyperLink).Text));
        }
        else if (current is DropDownList)
        {
            control.Controls.Remove(current);
            control.Controls.AddAt(i, new LiteralControl((current as DropDownList).SelectedItem.Text));
        }
        else if (current is CheckBox)
        {
            control.Controls.Remove(current);
            control.Controls.AddAt(i, new LiteralControl((current as CheckBox).Checked ? "True" : "False"));
        }

        if (current.HasControls())
        {
            GridViewExportUtil.PrepareControlForExport(current);
        }
    }
}

}

我的 gridview 有特殊格式,我使用波斯语。

当我使用这个类时,它是将gridview导出到excel,但是

我的问题是:打开 excel 文件时,出现错误“与文件扩展名指定的格式不同”。 打开文件时,波斯语单词难以辨认。

【问题讨论】:

    标签: c# asp.net excel gridview


    【解决方案1】:

    这是导出到 excel 的常见问题,它取决于用户安装的版本。

    看看这个问题的解决方案:the file you are trying to open is in a different format than specified by the file extension in Asp.Net

    【讨论】:

    • 谢谢,但是 XLWorkbook 的命名空间是什么?
    【解决方案2】:

    通过在导出函数中输出的标题部分添加一些样式,并且对于从右到左对齐选项,它被插入到调用的声明级别。

    如果您在项目中使用 C# 示例:

    private string AddExcelStyling()
    {
    
    StringBuilder sb = new StringBuilder();
    
    sb.Append("<html xmlns:o='urn:schemas-microsoft-com:office:office'\n" +
    
    "xmlns:x='urn:schemas-microsoft-com:office:excel'\n" +
    
    "xmlns='http://www.w3.org/TR/REC-html40'>\n" +
    
    "<head>\n");
    
    sb.Append("<style>\n");
    
    sb.Append("@page");
    
    sb.Append("mso-page-orientation:landscape;}\n");
    
    sb.Append("</style>\n");
    
    sb.Append("<!--[if gte mso 9]><xml>\n");
    
    sb.Append("<x:ExcelWorkbook>\n");
    
    sb.Append("<x:ExcelWorksheets>\n");
    
    sb.Append("<x:ExcelWorksheet>\n");
    
    sb.Append("<x:Name>Sheet Name</x:Name>\n");
    
    sb.Append("<x:WorksheetOptions>\n");
    
    sb.Append("<x:Print>\n");
    
    sb.Append("<x:HorizontalResolution>600</x:HorizontalResolution\n");
    
    sb.Append("<x:VerticalResolution>600</x:VerticalResolution\n");
    
    sb.Append("</x:Print>\n");
    
    sb.Append("<x:Selected/>\n");
    
    sb.Append("<x:DisplayRightToLeft/>\n");
    
    sb.Append("<x:DoNotDisplayGridlines/>\n");
    
    sb.Append("</x:WorksheetOptions>\n");
    
    sb.Append("</x:ExcelWorksheet>\n");
    
    sb.Append("</x:ExcelWorksheets>\n");
    
    sb.Append("</x:ExcelWorkbook>\n");
    
    sb.Append("</xml><![endif]-->\n");
    
    sb.Append("</head>\n");
    
    sb.Append("<body>\n");
    
    return sb.ToString();
    

    }

    查看此链接:http://forums.asp.net/p/1445619/3358464.aspx

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2013-09-25
      • 1970-01-01
      相关资源
      最近更新 更多