0

gridview コントロールを持つ Web ページで作業しています。データを .xls 形式に転送する必要があります。.xls ファイルを作成してデータを転送することはできますが、Excel シートの背景にグリッドセルを表示する必要があるという問題があります。現在、グリッドセルのない空白の背景のみが表示されています。それ以外の場合、グリッドビューは正常に転送されています。この問題により、.xls ファイルの印刷が問題になります。より多くの列を含むテーブルは圧縮されませんが、2 ~ 3 ページにわたって印刷されます。私のコードは次のとおりです。

public static void ExportToXLS(string fileName, GridView gv,string companyName,string reportTitle , string period)
    {
        //For writing to XLS file
        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))
            {

                Table tableReport = new Table();
                tableReport.GridLines = gv.GridLines;

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

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

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

                //Takes value of company name
                System.Web.UI.WebControls.Label labelCompany = new System.Web.UI.WebControls.Label();
                labelCompany.Text = companyName;
                labelCompany.Font.Bold = true;

                //Takes value of report title
                System.Web.UI.WebControls.Label labelReport = new System.Web.UI.WebControls.Label();
                labelReport.Text = reportTitle;
                labelReport.Font.Bold = true;

                //Takes value of report period
                System.Web.UI.WebControls.Label labelPeriod = new System.Web.UI.WebControls.Label();
                labelPeriod.Text = period;

                //  render the htmlwriter into the response
                htw.Write("<center>");
                labelCompany.RenderControl(htw);
                htw.Write("<br/>");
                labelReport.RenderControl(htw);
                htw.Write("<br/>");
                labelPeriod.RenderControl(htw);
                htw.Write("</center>");
                htw.Write("<br/>");
                tableReport.RenderControl(htw);
                HttpContext.Current.Response.Write(sw.ToString());
                HttpContext.Current.Response.End();
            }
        }
    }

助言がありますか?

4

5 に答える 5

1

参照:エクスポートグリッド

これを試して:

protected void btnExportExcel_Click(object sender, EventArgs e)

    {     

        Response.Clear();
        Response.Buffer = true;

        Response.AddHeader("content-disposition",

         "attachment;filename=GridViewExport.xls");

        Response.Charset = "";

        Response.ContentType = "application/vnd.ms-excel";

        StringWriter sw = new StringWriter();

        HtmlTextWriter hw = new HtmlTextWriter(sw);

        grdExport.AllowPaging = false;

        oMailing.GetData(out ODs);

        grdExport.DataSource = ODs;

        grdExport.DataBind();

        //Change the Header Row back to white color

        grdExport.HeaderRow.Style.Add("background-color", "#FFFFFF");

        //Apply style to Individual Cells

        grdExport.HeaderRow.Cells[0].Style.Add("background-color", "green");

        grdExport.HeaderRow.Cells[1].Style.Add("background-color", "green");

        grdExport.HeaderRow.Cells[2].Style.Add("background-color", "green");

        grdExport.HeaderRow.Cells[3].Style.Add("background-color", "green");

        grdExport.HeaderRow.Cells[4].Style.Add("background-color", "green");

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

    }
于 2012-04-20T07:26:55.857 に答える
0

私はExcelにエクスポートしてみましたが、最初にusingパーツを作成する必要があるようです。Excel = using Microsoft.Office.Interop.Excelボタンをクリックすると、ワークブックとワークシートのプロパティを持つExcelクラスを作成し、のgridviewプロパティを使用してGridview.Row[].cell[].Text.、すべての値を動的に格納できます。グリッドビューをワークシートに書き込んでから、FILE...に書き込みます。

于 2012-12-10T09:23:01.730 に答える
0

すべての答えがあなたが望むものを手に入れるでしょう-あなたはただフォーマットの部分が欠けているだけです。

結局のところ、実際に作成しているのは、Excelが読み取ることができるHTMLファイル(HTMLテーブルを含む)です。@BhaskarreddyMuleのRESPONSEヘッダーは、クライアントがファイルを「xls」ファイルとして処理し、Excelを実行して開いている場合に「強制」するものです(ただし、最終的には、実際には「ネイティブ」Excelファイルではありません)

これで邪魔になりません。HTMLで考えてみてください。HTMLの場合と同じように、列、行、およびテキストコンテンツのスタイルを設定します。これがフォーマットを制御する方法です(つまり、セルのコンテンツやフォントサイズなどがラップされないようにするための古い学校の「nowrap」)。

私はしばらくこれをしていません(これを行う必要があるときにExcelXMLとVB.NetXMLリテラルに移動しました)ので、あなたがどれだけのレベルの制御を持っているかわかりませんRenderControl...またはさらに「古い学校」に行き、HTMLテーブル文字列を最初から作成する必要があります。

于 2012-04-20T07:26:55.837 に答える
0
  Response.Clear();
  Response.Buffer = true;
  Response.AddHeader("content-disposition",attachment;filename=GridViewExport.xls");
  Response.Charset = "";
  Response.ContentType = "application/vnd.ms-excel";

  StringWriter sw = new StringWriter();
  HtmlTextWriter hw = new HtmlTextWriter(sw);
于 2012-04-20T06:48:42.060 に答える
0

まず、これを参照してください: How to export Nested gridview to export gridlines on the child grid , それがあなたの問題を解決するのに役立つことを願っています.

参照:コンソール タイプのアプリケーションで gridview を Excel にエクスポートする方法は?

以下のリンクで、Export To Excel コントロールを参照できます。カスタムコントロールです。それがあなたを助けることを願っています。

http://exporttoexcel.codeplex.com/

エクスポートされたグリッドのスタイリング:

 protected void btnExportExcel_Click(object sender, EventArgs e)
        {
            Response.Clear();
            Response.Buffer = true;

            Response.AddHeader("content-disposition",
             "attachment;filename=GridViewExport.xls");

            Response.Charset = "";
            Response.ContentType = "application/vnd.ms-excel";
            StringWriter sw = new StringWriter();
            HtmlTextWriter hw = new HtmlTextWriter(sw);

            grdExport.AllowPaging = false;
            oMailing.GetData(out ODs);
            grdExport.DataSource = ODs;
            grdExport.DataBind();

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

            //Apply style to Individual Cells
            grdExport.HeaderRow.Cells[0].Style.Add("background-color", "green");

            grdExport.HeaderRow.Cells[1].Style.Add("background-color", "green");

            grdExport.HeaderRow.Cells[2].Style.Add("background-color", "green");

            grdExport.HeaderRow.Cells[3].Style.Add("background-color", "green");

            grdExport.HeaderRow.Cells[4].Style.Add("background-color", "green");

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

                //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)
                {
                    row.Cells[0].Style.Add("background-color", "#C2D69B");
                    row.Cells[1].Style.Add("background-color", "#C2D69B");
                    row.Cells[2].Style.Add("background-color", "#C2D69B");
                    row.Cells[3].Style.Add("background-color", "#C2D69B");
                    row.Cells[4].Style.Add("background-color", "#C2D69B");
                }

            }
            grdExport.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();
        }
于 2012-04-20T07:38:16.330 に答える