-1

優れたグリッドビューをエクスポートする必要があります。グリッドビューからの戻りHTMLコードをHtmlTextWriterに配置し、これを応答に配置します。

結果ファイルはExcelで正常に機能し、ExcelはHTMLを解析でき、結果は読み取り可能で、Excel 2003および2007で完全に機能しますが、Excel 2008(MACOS)を搭載した一部のマシンでは、Excelは生のHTMLコードのみを表示し、これを処理できませんhtmlコード。

Excelを構成するためのアイデアはありますか?

変換するコードは次のとおりです。

public static void ToExcel(GridView gridView, string fileName)
{
    HttpResponse response = HttpContext.Current.Response;
    response.Clear();
    response.Buffer = true;

    fileName = fileName.Replace(".xls", string.Empty) + ".xls";

    response.AddHeader("content-disposition",
                       "attachment;filename=" + fileName);
    response.Charset = "";
    response.ContentEncoding = Encoding.Unicode;
    response.BinaryWrite(Encoding.Unicode.GetPreamble());
    response.ContentType = MimeTypes.GetContentType(fileName);

    StringWriter sw = new StringWriter();
    HtmlTextWriter hw = new HtmlTextWriter(sw);
    gridView.AllowPaging = false;
    //gridView.DataBind();

    //Change the Header Row back to white color
    gridView.HeaderRow.Style.Add("background-color", "#FFFFFF");

    //Apply style to Individual Cells
    for (int i = 0; i < gridView.HeaderRow.Cells.Count; i++)
    {
        gridView.HeaderRow.Cells[i].Style.Add("background-color", "yellow");    
    }

    for (int i = 0; i < gridView.Rows.Count; i++)
    {
        GridViewRow row = gridView.Rows[i];

        //Change Color back to white
        row.BackColor = System.Drawing.Color.White;

        //Apply text style to each Row
        row.Attributes.Add("class", "textmode");

        //Apply style to Individual Cells of Alternating Row
        if (i % 2 != 0)
        {
            for (int j = 0; j < row.Cells.Count; j++)
            {
                row.Cells[j].Style.Add("background-color", "#C2D69B");
            }
        }
    }

    gridView.RenderControl(hw);

    //style to format numbers to string
    string style = @"<style> .textmode { mso-number-format:\@; } </style>";
    response.Write(style);
    response.Output.Write(sw.ToString());
    response.Flush();
    response.End(); 
}
4

3 に答える 3

0

うーん、あなたは次のようなことをすることができます...

        Response.Clear();
        Response.AddHeader("content-disposition", "attachment;filename=report.xls");
        Response.Charset = "";
        Response.ContentType = "application/vnd.xls";
        var stringWrite = new System.IO.StringWriter();
        var htmlWrite = new HtmlTextWriter(stringWrite);
        this.gridView.RenderControl(htmlWrite);
        Response.Write(stringWrite.ToString());
        Response.End();
于 2010-03-05T14:38:56.160 に答える
0

Excel 2008forMacにはVBAがありません。VBA環境がない場合、C#アドイン(これが何であるかを推測します)がどのように実行されるかわかりません。私は自分のVBAファイルとアドインについて何もできないことを知っています。

于 2010-03-05T17:27:27.157 に答える
0

一般に、Excelを使用してHTMLを解析することは、非常に脆弱です。お気づきのとおり、Mac版のExcelでは問題が発生する可能性があります。代わりに、SpreadsheetXMLまたはNPOIなどのエンジンを使用して実際のExcelファイルを作成することを検討する必要があります。

HtmlドキュメントまたはXmlドキュメントのいずれかを使用すると、Excelは、Webからのダウンロード時に、ファイルが予期されたものと同じタイプではないことをユーザーに警告します(たとえば、Htmlファイルがに基づいてExcelファイルであると主張しているコンテンツタイプ。)。実際のExcelファイルを作成する場合、互換性の問題は発生せず、ユーザーにもこの警告は表示されません。

スプレッドシートXML

NPOI

于 2010-03-28T23:30:40.473 に答える