• 企业400电话
  • 微网小程序
  • AI电话机器人
  • 电商代运营
  • 全 部 栏 目

    企业400电话 网络优化推广 AI电话机器人 呼叫中心 网站建设 商标✡知产 微网小程序 电商运营 彩铃•短信 增值拓展业务
    asp.net生成Excel并导出下载五种实现方法

    方法一 通过GridView(简评:方法比较简单,但是只适合生成格式简单的Excel,且无法保留VBA代码),页面无刷新

    aspx.cs部分

    复制代码 代码如下:

    using System;
    using System.Collections;
    using System.Configuration;
    using System.Data;
    using System.Web;
    using System.Web.Security;
    using System.Web.UI;
    using System.Web.UI.HtmlControls;
    using System.Web.UI.WebControls;
    using System.Web.UI.WebControls.WebParts;
    using System.Text;

    public partial class DataPage_NationDataShow : System.Web.UI.Page
    {
    private Data_Link link = new Data_Link();
    private string sql;

    protected void Page_Load(object sender, EventArgs e)
    {
    Ajax.Utility.RegisterTypeForAjax(typeof(DataPage_NationDataShow));
    }

    protected void btnExcel_Click(object sender, EventArgs e)
    {
    string strExcelName = "MyExcel";
    strExcelName = strExcelName.Replace(@"/", "");

    Data_Link link = new Data_Link();
    string strSQL = this.hidParam.Value;
    DataSet ds = new DataSet();
    ds = link.D_DataSet_Return(strSQL);//获得想要放入Excel的数据

    gvExcel.Visible = true;
    gvExcel.DataSource = null;
    gvExcel.DataMember = ds.Tables[0].TableName;
    gvExcel.DataSource = ds.Tables[0];
    gvExcel.DataBind();

    ExportToExcel(this.Page, gvExcel, strExcelName);
    }

    protected void gvExcel_RowDataBound(object sender, GridViewRowEventArgs e)
    { }
    public override void VerifyRenderingInServerForm(Control control)
    { }

    /// summary>
    /// 工具方法,Excel出力(解决乱码问题)
    /// /summary>
    /// param name="page">调用页面/param>
    /// param name="excel">Excel数据/param>
    /// param name="fileName">文件名/param>
    public void ExportToExcel(System.Web.UI.Page page, GridView excel, string fileName)
    {
    try
    {
    foreach (GridViewRow row in excel.Rows)
    {
    for (int i = 0; i row.Cells.Count; i++)
    {
    excel.HeaderRow.Cells[i].BackColor = System.Drawing.Color.Yellow;
    }
    }
    excel.Font.Size = 10;
    excel.AlternatingRowStyle.BackColor = System.Drawing.Color.LightCyan;
    excel.RowStyle.Height = 25;

    page.Response.AppendHeader("Content-Disposition", "attachment;filename=" + fileName);
    page.Response.Charset = "utf-8";
    page.Response.ContentType = "application/vnd.ms-excel";
    page.Response.Write("meta http-equiv=Content-Type content=text/html;charset=utf-8>");
    excel.Page.EnableViewState = false;
    excel.Visible = true;
    excel.HeaderStyle.Reset();
    excel.AlternatingRowStyle.Reset();

    System.IO.StringWriter oStringWriter = new System.IO.StringWriter();
    System.Web.UI.HtmlTextWriter oHtmlTextWriter = new System.Web.UI.HtmlTextWriter(oStringWriter);
    excel.RenderControl(oHtmlTextWriter);
    page.Response.Write(oStringWriter.ToString());
    page.Response.End();

    excel.DataSource = null;
    excel.Visible = false;
    }
    catch (Exception e)
    {

    }
    }
    }

    aspx部分
    复制代码 代码如下:

    head runat="server">
    script type="text/javascript">
    //Excel DownLoad
    function excelExport(){
    var hidText = document.getElementById("hidParam");
    hidText.value = "some params";
    document.getElementById("ExcelOutput").click();
    }
    /script>
    /head>
    body onload="pageInit()">
    form id="form1" runat="server">
    input type="button" value="EXCEL下载" style="width:100px;" onclick="excelExport()" id="excelBut" />
    input id="hidParam" type="text" runat="server" style="display:none;"/>
    asp:Button runat="server" ID="ExcelOutput" style="display:none" Text= "EXCEL出力" Width="0px" onclick="btnExcel_Click" UseSubmitBehavior="false"/>
    asp:GridView ID="gvExcel" runat="server" Height="95px" OnRowDataBound="gvExcel_RowDataBound" Visible="False">/asp:GridView>
    /form>
    /body>

    在刚才的aspx.cs代码中
    复制代码 代码如下:

    foreach (GridViewRow row in excel.Rows)
    {
    for (int i = 0; i row.Cells.Count; i++)
    {
    excel.HeaderRow.Cells[i].BackColor = System.Drawing.Color.Yellow;
    }
    }

    这部分是给表头添加样式。

    有时候为了便于浏览,需要给交叉行添加样式,简单点的可以用下面这种:

    复制代码 代码如下:

    excel.AlternatingRowStyle.BackColor = System.Drawing.Color.LightCyan;

    但是细看一下会发现它把一整行的样式都改变了,包括后面那些没有用到的列。

    解决办法是有,不过比较繁琐,就是修改每个单元格的样式。

    复制代码 代码如下:

    int rowCount = excel.Rows.Count;
    int colCount = excel.HeaderRow.Cells.Count;

    for (int i = 0; i rowCount; i++)
    {
    for(int j=0;jcolCount; j++)
    {
    excel.Rows[i].Cells[j].BackColor = System.Drawing.Color.LightCyan;
    }
    }

    方法二 通过DataGrid(与方法一基本相同),页面无刷新

    aspx.cs部分

    复制代码 代码如下:

    public override void VerifyRenderingInServerForm(Control control)
    {}

    /// summary>
    /// エクセル出力イベント
    /// /summary>
    /// param name="sender">/param>
    /// param name="e">/param>
    private void ExcelBut_Click(object sender, System.EventArgs e)
    {
    DataGrid dgExcel = new DataGrid();

    try
    {
    DataSet ds = getExcelData(this.PageParams.Value);//出力データを取得する

    if(ds.Tables[0].Rows.Count>0)
    {
    //エクセルへデータを投入する
    string execlName= "MyExcel";
    Encoding encodingType=System.Text.Encoding.UTF8;
    dgExcel.DataMember=ds.Tables[0].TableName;
    dgExcel.DataSource=ds.Tables[0];

    Response.Buffer = true;
    Response.Charset = "utf-8";
    Response.AppendHeader("Content-Disposition", "attachment;filename=" + execlName+ ".xls");
    Response.ContentEncoding = encodingType;
    Response.ContentType = "application/ms-excel";
    StringWriter oStringWriter = new StringWriter();
    HtmlTextWriter oHtmlTextWriter = new HtmlTextWriter(oStringWriter);
    dgExcel.DataBind();
    dgExcel.Visible = true;
    dgExcel.RenderControl(oHtmlTextWriter);
    Response.Write(oStringWriter.ToString());
    Response.Flush();
    Response.Close();
    dgExcel.DataSource = null;
    dgExcel.Visible = false;
    }
    else
    {
    Response.Write("script>alert('xxxxxx')/script>");
    }
    }
    catch(Exception ex)
    {
    Response.Write("script>alert('oooooo')/script>");
    }
    }

    aspx部分
    复制代码 代码如下:

    head runat="server">
    script type="text/javascript">
    //Excel DownLoad
    function excelExport(){
    var hidText = document.getElementById("hidParam");
    hidText.value = "some params";
    document.getElementById("ExcelOutput").click();
    }
    /script>
    /head>
    body onload="pageInit()">
    form id="form1" runat="server">
    input type="button" value="EXCEL下载" style="width:100px;" onclick="excelExport()" id="excelBut" NAME="excelBut"/>
    input id="hidParam" type="text" runat="server" style="display:none;" NAME="hidParam"/>
    asp:Button runat="server" ID="ExcelOutput" style="display:none" Text= "EXCEL出力" Width="0px" onclick="btnExcel_Click" UseSubmitBehavior="false"/>
    asp:datagrid id="gvExcel" Visible="False" Runat="server" style="Z-INDEX: 107; POSITION: absolute; TOP: 72px; LEFT: 520px"
    Width="80px" Height="40px">/asp:datagrid>
    /form>
    /body>

    方法三 以XML形式的Excel方式(可以设置丰富的样式,并可以有多个sheet,但需要模版。速度很快,但生成的文件较大,且无法保留VBA代码)

    具体方法:把模版以 XML Document形式另存为A.xml。然后参照A.xml中的内容即可

    复制代码 代码如下:
     
    private void ExcelBut_Click(object sender, System.EventArgs e)
    {
    DataSet ds = new DataSet();
    string ExcelFileName = "";
    DataRow dr=[------列名信息-------];
    try
    {
    ExcelFileName = Path.Combine(Request.PhysicalApplicationPath + "/ExcelFile", "MyExcel.xls");

    //获取Excel需要的数据
    ds = [------获得数据-------];
    if (ds.Tables.Count == 0)
    {
    Response.Write("script type='text/javascript'>alert('无数据');/script>");
    return;
    }
    int sheetNum = ds.Tables.Count / 2;
    StreamWriter writer = new StreamWriter(ExcelFileName, false);

    //Styles标签前面的信息相当于'头信息',不需要改变
    writer.WriteLine("?xml version=\"1.0\"?>");
    writer.WriteLine("?mso-application progid=\"Excel.Sheet\"?>");
    writer.WriteLine("Workbook xmlns=\"urn:schemas-microsoft-com:office:spreadsheet\"");
    writer.WriteLine("xmlns:o=\"urn:schemas-microsoft-com:office:office\"");
    writer.WriteLine("xmlns:x=\"urn:schemas-microsoft-com:office:excel\"");
    writer.WriteLine("xmlns:ss=\"urn:schemas-microsoft-com:office:spreadsheet\"");
    writer.WriteLine("xmlns:html=\"http://www.w3.org/TR/REC-html40\">");
    writer.WriteLine("DocumentProperties xmlns=\"urn:schemas-microsoft-com:office:office\">");
    writer.WriteLine("LastAuthor>Automated Report Generator Example/LastAuthor>");
    writer.WriteLine(string.Format("Created>{0}T{1}Z/Created>", DateTime.Now.ToString("yyyy-mm-dd"), DateTime.Now.ToString("HH:MM:SS")));
    writer.WriteLine(" Company>51aspx.com/Company>");
    writer.WriteLine(" Version>11.6408/Version>");
    writer.WriteLine("/DocumentProperties>");
    writer.WriteLine("ExcelWorkbook xmlns=\"urn:schemas-microsoft-com:office:excel\">");
    writer.WriteLine("WindowHeight>6195/WindowHeight>");
    writer.WriteLine(" WindowWidth>18495/WindowWidth>");
    writer.WriteLine(" WindowTopX>525/WindowTopX>");
    writer.WriteLine(" WindowTopY>4260/WindowTopY>");
    writer.WriteLine(" AcceptLabelsInFormulas/>");
    writer.WriteLine(" ProtectStructure>True/ProtectStructure>");
    writer.WriteLine(" ProtectWindows>False/ProtectWindows>");
    writer.WriteLine("/ExcelWorkbook>");

    //通过 ss:ID 和 ss:Name相当于html中style的类
    writer.WriteLine(" Styles> ");
    writer.WriteLine(" Style ss:ID='Default' ss:Name='Normal'> ");
    writer.WriteLine(" Alignment ss:Vertical='Bottom'/> ");
    writer.WriteLine(" Borders/> ");
    writer.WriteLine(" Font ss:FontName='MS Pゴシック' x:CharSet='128' x:Family='Modern' ss:Size='11'/> ");
    writer.WriteLine(" Interior/> ");
    writer.WriteLine(" NumberFormat/> ");
    writer.WriteLine(" Protection/> ");
    writer.WriteLine(" /Style> ");
    writer.WriteLine(" Style ss:ID='s23'> ");
    writer.WriteLine(" Font ss:FontName='MS Pゴシック' x:CharSet='128' x:Family='Modern' ss:Size='11' ");
    writer.WriteLine(" ss:Color='#FF0000'/> ");
    writer.WriteLine(" /Style> ");
    writer.WriteLine(" Style ss:ID='s24'> ");
    writer.WriteLine(" Interior/> ");
    writer.WriteLine(" /Style> ");
    writer.WriteLine(" Style ss:ID='s25'> ");
    writer.WriteLine(" Font ss:FontName='MS Pゴシック' x:CharSet='128' x:Family='Modern' ss:Size='11'/> ");
    writer.WriteLine(" Interior/> ");
    writer.WriteLine(" /Style> ");
    writer.WriteLine(" Style ss:ID='s26'> ");
    writer.WriteLine(" Font ss:FontName='MS Pゴシック' x:CharSet='128' x:Family='Modern' ss:Size='11' ");
    writer.WriteLine(" ss:Color='#FF0000'/> ");
    writer.WriteLine(" Interior/> ");
    writer.WriteLine(" /Style> ");
    writer.WriteLine(" Style ss:ID='s27'> ");
    writer.WriteLine(" Borders> ");
    writer.WriteLine(" Border ss:Position='Bottom' ss:LineStyle='Continuous' ss:Weight='1'/> ");
    writer.WriteLine(" Border ss:Position='Left' ss:LineStyle='Continuous' ss:Weight='1'/> ");
    writer.WriteLine(" Border ss:Position='Right' ss:LineStyle='Continuous' ss:Weight='1'/> ");
    writer.WriteLine(" Border ss:Position='Top' ss:LineStyle='Continuous' ss:Weight='1'/> ");
    writer.WriteLine(" /Borders> ");
    writer.WriteLine(" Font ss:FontName='MS Pゴシック' x:CharSet='128' x:Family='Modern' ss:Size='11'/> ");
    writer.WriteLine(" Interior ss:Color='#CCFFFF' ss:Pattern='Solid'/> ");
    writer.WriteLine(" Protection/> ");
    writer.WriteLine(" /Style> ");
    writer.WriteLine(" Style ss:ID='s28'> ");
    writer.WriteLine(" Borders> ");
    writer.WriteLine(" Border ss:Position='Bottom' ss:LineStyle='Continuous' ss:Weight='1'/> ");
    writer.WriteLine(" Border ss:Position='Left' ss:LineStyle='Continuous' ss:Weight='1'/> ");
    writer.WriteLine(" Border ss:Position='Right' ss:LineStyle='Continuous' ss:Weight='1'/> ");
    writer.WriteLine(" Border ss:Position='Top' ss:LineStyle='Continuous' ss:Weight='1'/> ");
    writer.WriteLine(" /Borders> ");
    writer.WriteLine(" Font ss:FontName='MS Pゴシック' x:CharSet='128' x:Family='Modern' ss:Size='11'/> ");
    writer.WriteLine(" Interior ss:Color='#CCFFFF' ss:Pattern='Solid'/> ");
    writer.WriteLine(" /Style> ");
    writer.WriteLine(" Style ss:ID='s29'> ");
    writer.WriteLine(" Borders> ");
    writer.WriteLine(" Border ss:Position='Bottom' ss:LineStyle='Continuous' ss:Weight='1'/> ");
    writer.WriteLine(" Border ss:Position='Left' ss:LineStyle='Continuous' ss:Weight='1'/> ");
    writer.WriteLine(" Border ss:Position='Top' ss:LineStyle='Continuous' ss:Weight='1'/> ");
    writer.WriteLine(" /Borders> ");
    writer.WriteLine(" Font ss:FontName='MS Pゴシック' x:CharSet='128' x:Family='Modern' ss:Size='11'/> ");
    writer.WriteLine(" Interior ss:Color='#CCFFFF' ss:Pattern='Solid'/> ");
    writer.WriteLine(" /Style> ");
    writer.WriteLine(" Style ss:ID='s30'> ");
    writer.WriteLine(" Borders> ");
    writer.WriteLine(" Border ss:Position='Bottom' ss:LineStyle='Continuous' ss:Weight='1'/> ");
    writer.WriteLine(" Border ss:Position='Top' ss:LineStyle='Continuous' ss:Weight='1'/> ");
    writer.WriteLine(" /Borders> ");
    writer.WriteLine(" Font ss:FontName='MS Pゴシック' x:CharSet='128' x:Family='Modern' ss:Size='11'/> ");
    writer.WriteLine(" Interior ss:Color='#CCFFFF' ss:Pattern='Solid'/> ");
    writer.WriteLine(" /Style> ");
    writer.WriteLine(" Style ss:ID='s31'> ");
    writer.WriteLine(" Borders> ");
    writer.WriteLine(" Border ss:Position='Bottom' ss:LineStyle='Continuous' ss:Weight='1'/> ");
    writer.WriteLine(" Border ss:Position='Right' ss:LineStyle='Continuous' ss:Weight='1'/> ");
    writer.WriteLine(" Border ss:Position='Top' ss:LineStyle='Continuous' ss:Weight='1'/> ");
    writer.WriteLine(" /Borders> ");
    writer.WriteLine(" Font ss:FontName='MS Pゴシック' x:CharSet='128' x:Family='Modern' ss:Size='11'/> ");
    writer.WriteLine(" Interior ss:Color='#CCFFFF' ss:Pattern='Solid'/> ");
    writer.WriteLine(" /Style> ");
    writer.WriteLine(" Style ss:ID='s32'> ");
    writer.WriteLine(" Alignment ss:Vertical='Bottom' ss:WrapText='1'/> ");
    writer.WriteLine(" Borders> ");
    writer.WriteLine(" Border ss:Position='Bottom' ss:LineStyle='Continuous' ss:Weight='1'/> ");
    writer.WriteLine(" Border ss:Position='Left' ss:LineStyle='Continuous' ss:Weight='1'/> ");
    writer.WriteLine(" Border ss:Position='Right' ss:LineStyle='Continuous' ss:Weight='1'/> ");
    writer.WriteLine(" Border ss:Position='Top' ss:LineStyle='Continuous' ss:Weight='1'/> ");
    writer.WriteLine(" /Borders> ");
    writer.WriteLine(" Font ss:FontName='MS Pゴシック' x:CharSet='128' x:Family='Modern' ss:Size='11'/> ");
    writer.WriteLine(" Interior ss:Color='#CCFFFF' ss:Pattern='Solid'/> ");
    writer.WriteLine(" /Style> ");
    writer.WriteLine(" Style ss:ID='s33'> ");
    writer.WriteLine(" Alignment ss:Vertical='Bottom' ss:WrapText='1'/> ");
    writer.WriteLine(" /Style> ");
    writer.WriteLine(" Style ss:ID='s34'> ");
    writer.WriteLine(" Alignment ss:Vertical='Bottom' ss:WrapText='1'/> ");
    writer.WriteLine(" Borders> ");
    writer.WriteLine(" Border ss:Position='Bottom' ss:LineStyle='Continuous' ss:Weight='1'/> ");
    writer.WriteLine(" Border ss:Position='Left' ss:LineStyle='Continuous' ss:Weight='1'/> ");
    writer.WriteLine(" Border ss:Position='Right' ss:LineStyle='Continuous' ss:Weight='1'/> ");
    writer.WriteLine(" Border ss:Position='Top' ss:LineStyle='Continuous' ss:Weight='1'/> ");
    writer.WriteLine(" /Borders> ");
    writer.WriteLine(" Font ss:FontName='MS Pゴシック' x:CharSet='128' x:Family='Modern' ss:Size='11'/> ");
    writer.WriteLine(" Interior/> ");
    writer.WriteLine(" /Style> ");
    writer.WriteLine(" Style ss:ID='s35'> ");
    writer.WriteLine(" Borders> ");
    writer.WriteLine(" Border ss:Position='Bottom' ss:LineStyle='Continuous' ss:Weight='1'/> ");
    writer.WriteLine(" Border ss:Position='Left' ss:LineStyle='Continuous' ss:Weight='1'/> ");
    writer.WriteLine(" Border ss:Position='Right' ss:LineStyle='Continuous' ss:Weight='1'/> ");
    writer.WriteLine(" Border ss:Position='Top' ss:LineStyle='Continuous' ss:Weight='1'/> ");
    writer.WriteLine(" /Borders> ");
    writer.WriteLine(" Font ss:FontName='MS Pゴシック' x:CharSet='128' x:Family='Modern' ss:Size='11'/> ");
    writer.WriteLine(" Interior/> ");
    writer.WriteLine(" /Style> ");
    writer.WriteLine(" Style ss:ID='s36'> ");
    writer.WriteLine(" Borders> ");
    writer.WriteLine(" Border ss:Position='Bottom' ss:LineStyle='Continuous' ss:Weight='1'/> ");
    writer.WriteLine(" Border ss:Position='Left' ss:LineStyle='Continuous' ss:Weight='1'/> ");
    writer.WriteLine(" Border ss:Position='Right' ss:LineStyle='Continuous' ss:Weight='1'/> ");
    writer.WriteLine(" Border ss:Position='Top' ss:LineStyle='Continuous' ss:Weight='1'/> ");
    writer.WriteLine(" /Borders> ");
    writer.WriteLine(" Font ss:FontName='MS Pゴシック' x:CharSet='128' x:Family='Modern' ss:Size='11'/> ");
    writer.WriteLine(" Interior ss:Color='#FFFF99' ss:Pattern='Solid'/> ");
    writer.WriteLine(" Protection ss:Protected='0'/> ");
    writer.WriteLine(" /Style> ");
    writer.WriteLine(" Style ss:ID='s37'> ");
    writer.WriteLine(" Borders> ");
    writer.WriteLine(" Border ss:Position='Bottom' ss:LineStyle='Continuous' ss:Weight='1'/> ");
    writer.WriteLine(" Border ss:Position='Left' ss:LineStyle='Continuous' ss:Weight='1'/> ");
    writer.WriteLine(" Border ss:Position='Right' ss:LineStyle='Continuous' ss:Weight='1'/> ");
    writer.WriteLine(" Border ss:Position='Top' ss:LineStyle='Continuous' ss:Weight='1'/> ");
    writer.WriteLine(" /Borders> ");
    writer.WriteLine(" Font ss:FontName='MS Pゴシック' x:CharSet='128' x:Family='Modern' ss:Size='11'/> ");
    writer.WriteLine(" Interior/> ");
    writer.WriteLine(" /Style> ");
    writer.WriteLine(" Style ss:ID='s38'> ");
    writer.WriteLine(" Borders> ");
    writer.WriteLine(" Border ss:Position='Bottom' ss:LineStyle='Continuous' ss:Weight='1'/> ");
    writer.WriteLine(" Border ss:Position='Left' ss:LineStyle='Continuous' ss:Weight='1'/> ");
    writer.WriteLine(" Border ss:Position='Right' ss:LineStyle='Continuous' ss:Weight='1'/> ");
    writer.WriteLine(" Border ss:Position='Top' ss:LineStyle='Continuous' ss:Weight='1'/> ");
    writer.WriteLine(" /Borders> ");
    writer.WriteLine(" Font ss:FontName='MS Pゴシック' x:CharSet='128' x:Family='Modern' ss:Size='11'/> ");
    writer.WriteLine(" Interior/> ");
    writer.WriteLine(" /Style> ");
    writer.WriteLine(" Style ss:ID='s39'> ");
    writer.WriteLine(" Borders> ");
    writer.WriteLine(" Border ss:Position='Bottom' ss:LineStyle='Continuous' ss:Weight='1'/> ");
    writer.WriteLine(" Border ss:Position='Left' ss:LineStyle='Continuous' ss:Weight='1'/> ");
    writer.WriteLine(" Border ss:Position='Right' ss:LineStyle='Continuous' ss:Weight='1'/> ");
    writer.WriteLine(" Border ss:Position='Top' ss:LineStyle='Continuous' ss:Weight='1'/> ");
    writer.WriteLine(" /Borders> ");
    writer.WriteLine(" Font ss:FontName='MS Pゴシック' x:CharSet='128' x:Family='Modern' ss:Size='11'/> ");
    writer.WriteLine(" Interior/> ");
    writer.WriteLine(" /Style> ");
    writer.WriteLine(" /Styles> ");

    //Sheet操作
    writer.WriteLine("Worksheet ss:Name='" + dr["Msg030"] + "'>");
    writer.WriteLine(" Table ss:ExpandedColumnCount='9' ss:ExpandedRowCount='3000' x:FullColumns='1' x:FullRows='1' ss:StyleID='s33' ss:DefaultColumnWidth='54' ss:DefaultRowHeight='13.5'>");
    writer.WriteLine("Column ss:StyleID='s34' ss:AutoFitWidth='0' ss:Width='110.25'/>");
    writer.WriteLine("Column ss:StyleID='s34' ss:AutoFitWidth='0' ss:Width='33.75'/>");
    writer.WriteLine("Column ss:StyleID='s34' ss:AutoFitWidth='0' ss:Width='118.5'/>");
    writer.WriteLine("Column ss:StyleID='s34' ss:AutoFitWidth='0' ss:Width='159.75'/>");
    writer.WriteLine("Column ss:StyleID='s34' ss:AutoFitWidth='0' ss:Width='147.75' ss:Span='4'/>");

    for (int num = sheetNum - 1; num >= 0; num = num - 1)
    {
    // 考課表間有3行的空行
    if (num != sheetNum - 1)
    {
    writer.WriteLine("Row>");
    writer.WriteLine("/Row>");
    writer.WriteLine("Row>");
    writer.WriteLine("/Row>");
    writer.WriteLine("Row>");
    writer.WriteLine("/Row>");
    }

    // 列名
    writer.WriteLine("Row ss:Height='40.5'>");
    writer.WriteLine("Cell ss:StyleID='s32'>Data ss:Type='String'>" + dr["Msg002"] + "/Data>/Cell>");
    writer.WriteLine("Cell ss:StyleID='s32'>Data ss:Type='String'>" + dr["Msg003"] + "/Data>/Cell>");
    writer.WriteLine("Cell ss:StyleID='s32'>Data ss:Type='String'>" + dr["Msg004"] + "/Data>/Cell>");
    writer.WriteLine("/Row>");

    // 详细数据
    for (int i = 0; i ds.Tables[2 * num].Rows.Count; i++)
    {
    writer.WriteLine("Row ss:Height='27'>");
    writer.WriteLine("Cell>Data ss:Type='String'>" + ds.Tables[2 * num].Rows[i]["EvalLevel1Name"].ToString() + "/Data>/Cell>");
    writer.WriteLine("Cell>Data ss:Type='Number'>" + ds.Tables[2 * num].Rows[i]["EvalLevel2Code"].ToString() + "/Data>/Cell>");
    writer.WriteLine("Cell>Data ss:Type='String'>" + ds.Tables[2 * num].Rows[i]["EvalLevel2Name"].ToString() + "/Data>/Cell>");
    writer.WriteLine("/Row>");
    }
    }
    writer.WriteLine(" /Table>");
    writer.WriteLine(" /Worksheet>");

    // 其他Sheet操作
    for (int num = sheetNum - 1; num >= 0; num--)
    {
    writer.WriteLine("Worksheet ss:Name='" + ds.Tables[2 * num].Rows[0][1].ToString() + "' ss:Protected='1'>");
    writer.WriteLine(" Table ss:ExpandedColumnCount='31' ss:ExpandedRowCount='30000' x:FullColumns='1' x:FullRows='1' ss:StyleID='s25' ss:DefaultColumnWidth='54' ss:DefaultRowHeight='13.5'>");
    writer.WriteLine(" Row>");
    writer.WriteLine("Cell ss:StyleID='s26'>PhoneticText xmlns='urn:schemas-microsoft-com:office:excel'>カキキイロテンスウツ/PhoneticText>Data ss:Type='String'>" + dr["Msg031"] + "/Data>/Cell>");
    writer.WriteLine("Cell ss:Index='14' ss:StyleID='Default'/>");
    writer.WriteLine("Cell ss:StyleID='Default'/>");
    writer.WriteLine("Cell ss:StyleID='Default'/>");
    writer.WriteLine("Cell ss:StyleID='Default'/>");
    writer.WriteLine("Cell ss:StyleID='Default'/>");
    writer.WriteLine("Cell ss:StyleID='Default'/>");
    writer.WriteLine("Cell ss:StyleID='Default'/>");
    writer.WriteLine("Cell ss:StyleID='Default'/>");
    writer.WriteLine("Cell ss:StyleID='Default'/>");
    writer.WriteLine("/Row>");
    writer.WriteLine(" Row>");
    writer.WriteLine("Cell ss:StyleID='s26'>PhoneticText xmlns='urn:schemas-microsoft-com:office:excel'>カキキイロテンスウツ/PhoneticText>Data ss:Type='String'>" + dr["Msg032"] + "/Data>/Cell>");
    writer.WriteLine("Cell ss:Index='14' ss:StyleID='Default'/>");
    writer.WriteLine("Cell ss:StyleID='Default'/>");
    writer.WriteLine("Cell ss:StyleID='Default'/>");

    writer.WriteLine("/Row>");

    // 列名
    writer.WriteLine("Row>");
    writer.WriteLine("Cell ss:StyleID='s27'>Data ss:Type='String'>" + dr["Msg001"] + "/Data>/Cell>");
    writer.WriteLine("Cell ss:StyleID='s28'>Data ss:Type='String'>" + dr["Msg002"] + "/Data>/Cell>");
    writer.WriteLine("Cell ss:StyleID='s28'>Data ss:Type='String'>" + dr["Msg003"] + "/Data>/Cell>");
    writer.WriteLine("/Row>");
    int SheetN = ds.Tables[2 * num].Rows.Count;

    //详细数据
    for (int i = 0; i SheetN; i++)
    {
    writer.WriteLine("Row>");
    writer.WriteLine("Cell ss:StyleID='s35'>Data ss:Type='Number'>" + ds.Tables[2 * num].Rows[i]["EvalLevel1Code"].ToString() + "/Data>/Cell>");
    writer.WriteLine("Cell ss:StyleID='s35'>Data ss:Type='String'>" + ds.Tables[2 * num].Rows[i]["EvalLevel1Name"].ToString() + "/Data>/Cell>");
    writer.WriteLine("Cell ss:StyleID='s35'>Data ss:Type='Number'>" + ds.Tables[2 * num].Rows[i]["EvalLevel2Code"].ToString() + "/Data>/Cell>");
    writer.WriteLine("Cell>Data ss:Type='String'> /Data>/Cell>");
    writer.WriteLine("/Row>");
    }
    writer.WriteLine("Row>");
    writer.WriteLine("/Row>");
    writer.WriteLine("Row>");
    writer.WriteLine("/Row>");

    //列名
    writer.WriteLine("Row>");
    writer.WriteLine("Cell ss:StyleID='s29'>Data ss:Type='String'>" + dr["Msg011"] + "/Data>/Cell>");
    writer.WriteLine("Cell ss:StyleID='s30'/>");
    writer.WriteLine("Cell ss:StyleID='s31'/>");
    writer.WriteLine("Cell ss:StyleID='s29'>Data ss:Type='String'>" + dr["Msg012"] + "/Data>/Cell>");
    writer.WriteLine("Cell ss:StyleID='s31'/>");
    writer.WriteLine("Cell ss:StyleID='s29'>Data ss:Type='String'>" + dr["Msg013"] + "/Data>/Cell>");
    writer.WriteLine("Cell ss:StyleID='s30'/>");
    writer.WriteLine("Cell ss:StyleID='s30'/>");
    writer.WriteLine("Cell ss:StyleID='s30'/>");
    writer.WriteLine("Cell ss:StyleID='s31'/>");
    writer.WriteLine("Cell ss:StyleID='s29'>Data ss:Type='String'>" + dr["Msg014"] + "/Data>/Cell>");
    writer.WriteLine("Cell ss:StyleID='s31'/>");
    writer.WriteLine("Cell ss:StyleID='s29'>Data ss:Type='String'>" + dr["Msg015"] + "/Data>/Cell>");
    writer.WriteLine("Cell ss:StyleID='s31'/>");
    writer.WriteLine("/Row>");
    writer.WriteLine("Row>");
    writer.WriteLine("Cell ss:StyleID='s28'>Data ss:Type='String'>" + dr["Msg016"] + "/Data>/Cell>");
    writer.WriteLine("Cell ss:StyleID='s28'>Data ss:Type='String'>" + dr["Msg017"] + "/Data>/Cell>");
    writer.WriteLine("Cell ss:StyleID='s28'>Data ss:Type='String'>" + dr["Msg018"] + "/Data>/Cell>");
    writer.WriteLine("Cell ss:StyleID='s28'>Data ss:Type='String'>" + dr["Msg019"] + "/Data>/Cell>");

    writer.WriteLine("/Row>");
    int DateLen = ds.Tables[2 * num + 1].Rows.Count;
    string EmployeeManagement = "";

    for (int i = 0; i DateLen; i++)
    {
    writer.WriteLine("Row>");
    writer.WriteLine("Cell ss:StyleID='s37'>Data ss:Type='Number'>" + ds.Tables[2 * num + 1].Rows[i]["EmployeeManagementID"].ToString() + "/Data>/Cell>");
    if (!EmployeeManagement.Equals(ds.Tables[2 * num + 1].Rows[i]["EmployeeManagementID"].ToString()))
    {
    writer.WriteLine("Cell ss:StyleID='s35'>Data ss:Type='Number'>" + ds.Tables[2 * num + 1].Rows[i]["EmployeeCode"].ToString() + "/Data>/Cell>");
    writer.WriteLine("Cell ss:StyleID='s35'>Data ss:Type='String'>" + ds.Tables[2 * num + 1].Rows[i]["EmployeeName"].ToString() + "/Data>/Cell>");
    writer.WriteLine("Cell ss:StyleID='s35'>Data ss:Type='String'>" + ds.Tables[2 * num + 1].Rows[i]["BefEmployeeName2"].ToString() + "/Data>/Cell>");
    writer.WriteLine("Cell ss:StyleID='s35'>Data ss:Type='String'>" + ds.Tables[2 * num + 1].Rows[i]["EmployeeName2"].ToString() + "/Data>/Cell>");
    writer.WriteLine("Cell ss:StyleID='s38'>Data ss:Type='Number'>" + ds.Tables[2 * num + 1].Rows[i]["EvalLevel1Code"].ToString() + "/Data>/Cell>");
    writer.WriteLine("Cell ss:StyleID='s35'>Data ss:Type='String'>" + ds.Tables[2 * num + 1].Rows[i]["EvalLevel1Name"].ToString() + "/Data>/Cell>");
    EmployeeManagement = ds.Tables[2 * num + 1].Rows[i]["EmployeeManagementID"].ToString();
    }
    else
    {
    writer.WriteLine("Cell ss:StyleID='s35'>Data ss:Type='String'>/Data>/Cell>");
    writer.WriteLine("Cell ss:StyleID='s35'>Data ss:Type='String'>/Data>/Cell>");
    writer.WriteLine("Cell ss:StyleID='s35'>Data ss:Type='String'>/Data>/Cell>");
    writer.WriteLine("Cell ss:StyleID='s35'>Data ss:Type='String'>/Data>/Cell>");
    writer.WriteLine("Cell ss:StyleID='s38'>Data ss:Type='String'>/Data>/Cell>");
    writer.WriteLine("Cell ss:StyleID='s35'>Data ss:Type='String'>/Data>/Cell>");
    }
    writer.WriteLine("Cell ss:StyleID='s39'>Data ss:Type='Number'>" + ds.Tables[2 * num + 1].Rows[i]["EvalLevel2Code"].ToString() + "/Data>/Cell>");
    writer.WriteLine("Cell ss:StyleID='s35'>Data ss:Type='String'>" + ds.Tables[2 * num + 1].Rows[i]["EvalLevel2Name"].ToString() + "/Data>/Cell>");
    writer.WriteLine("/Row>");
    }
    writer.WriteLine(" /Table>");
    writer.WriteLine(" /Worksheet>");
    }

    writer.WriteLine("/Workbook>");
    writer.Close();

    FileDownload(ExcelFileName);
    }
    catch (System.Exception ex)
    {

    }
    finally
    {
    Response.End();
    }
    }
    public void FileDownload(FullFileName)
    {
    FileInfo DownloadFile = new FileInfo(FullFileName);
    Response.Clear();
    Response.ClearHeaders();
    Response.Buffer = true;
    Response.AppendHeader("Content-Disposition", "attachment;filename=" + System.Web.HttpUtility.UrlEncode(System.Text.Encoding.UTF8.GetBytes(MyFile".xls")));
    Response.ContentType = "application/ms-excel;charset=UTF-8";//DownloadFile.FullNameoctet-stream
    Response.ContentEncoding = System.Text.Encoding.GetEncoding("shift-jis");
    Response.AppendHeader("Content-Length", DownloadFile.Length.ToString());
    Response.WriteFile(FullFileName);
    Response.Flush();

    if (File.Exists(FullFileName))
    {
    File.Delete(FullFileName);
    }
    }

    方法四 用微软的COM组件操作Excel。虽然可以很方便的操作单元格,并且能保留VBA代码,它相当于直接打开一个EXCEL进程。

    当初这个COM组件式给WinForm准备的,但在Web端有很多东西的支持不尽人意,例如无法用组件中的方法关闭Excel对象,

    只能通过强制关闭Excel进程的方式(这其中还有很多问题,例如只能关闭当前打开的这个Excel的进程,否则会把其他用户的Excel进程关闭)。在这里不推荐

    方法五 用流的方式,把内容以Table的格式向Excel中放数据 好处是 可以生成格式丰富复杂的Excel,页面无刷新

    aspx部分

    复制代码 代码如下:

    asp:Button ID="hidExport" onClick="hidExport_Click()" Runat="server">/asp:Button>

    aspx.cs部分
    复制代码 代码如下:

    //内容很好理解,只需当成Table来拼字符串即可
    private string getExcelContent()
    {
    StringBuilder sb = new StringBuilder();

    sb.Append("table borderColor='black' border='1' >");
    sb.Append("thead>tr>th colSpan='2' bgColor='#ccfefe'>标题/th>/tr>");
    sb.Append("tr>th bgColor='#ccfefe'>号码/th>th bgColor='#ccfefe'>名字/th>/tr>/thead>");
    sb.Append("tbody>");
    sb.Append("tr class='firstTR'>td bgcolor='#FF99CC'>/td>td>/td>/tr>");
    sb.Append("tr class='secondTR'>td>/td>td bgcolor='lightskyblue'>/td>/tr>");
    sb.Append("/tbody>/table>");
    return sb.ToString();
    }

    private void hidExport_Click(object sender, System.EventArgs e)
    {
    string content = getExcelContent();
    string css = ".firstTR td{color:blue;width:100px;}.secondTR td{color:blue;width:100px;}";
    string filename = "Test.xls";

    CommonTool.ExportToExcel(filename, content ,css);
    }

    工具类CommonTool
    复制代码 代码如下:

    public class CommonTool
    {
    /// summary>
    /// 以流的形式,可以设置很丰富复杂的样式
    /// /summary>
    /// param name="content">Excel中内容(Table格式)/param>
    /// param name="filename">文件名/param>
    /// param name="cssText">样式内容/param>
    public static void ExportToExcel(string filename, string content,string cssText)
    {
    var res = HttpContext.Current.Response;
    content = String.Format("style type='text/css'>{0}/style>{1}",cssText,content);

    res.Clear();
    res.Buffer = true;
    res.Charset = "UTF-8";
    res.AddHeader("Content-Disposition", "attachment; filename=" + filename);
    res.ContentEncoding = System.Text.Encoding.GetEncoding("UTF-8");
    res.ContentType = "application/ms-excel;charset=UTF-8";
    res.Write(content);
    res.Flush();
    res.End();
    }
    }

    这种方法比较灵活,而且可以通过选择器来添加样式,相当不错。缺点就是需要将数据转换成字符串。

    您可能感兴趣的文章:
    • ASP.NET Core 导入导出Excel xlsx 文件实例
    • ASP.NET操作EXCEL的总结篇
    • .NET读取Excel文件的三种方法的区别
    • ASP.NET(C#)读取Excel的文件内容
    • asp.net使用npoi读取excel模板并导出下载详解
    • Asp.Net使用Npoi导入导出Excel的方法
    • asp.net中EXCEL数据导入到数据库的方法
    • ASP.NET导出Excel打开时提示:与文件扩展名指定文件不一致解决方法
    • 直接在线预览Word、Excel、TXT文件之ASP.NET
    • .Net Core使用OpenXML导出、导入Excel
    上一篇:FileUpload使用Javascript检查扩展名是否有效实现思路
    下一篇:asp.net url传递后地址栏乱码(中文超过两个汉字)
  • 相关文章
  • 

    © 2016-2020 巨人网络通讯

    时间:9:00-21:00 (节假日不休)

    地址:江苏信息产业基地11号楼四层

    《增值电信业务经营许可证》 苏B2-20120278

    asp.net生成Excel并导出下载五种实现方法 asp.net,生成,Excel,并,导出,