-1


0

Excel 2008のカント解析HTML

グリッドビューをエクセルにエクスポートする必要があります。グリッドビューからの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 = @" .textmode { mso-number-format:\@; } ";
    response.Write(style);
    response.Output.Write(sw.ToString());
    response.Flush();
    response.End();
}

3 Answer


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();


0


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


0


一般に、ExcelのHTML解析に依存することは非常に脆弱です。 ご存じのとおり、Mac版のExcelには問題が発生する可能性があります。 代わりに、スプレッドシートXMLまたはNPOIなどのエンジンを使用して、実際のExcelファイルを作成することを検討する必要があります。

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