导出excel无法打开.xlsx

时间:2015-08-14 03:46:14

标签: asp.net database export-to-excel

我正在使用asp.net C#,目前在做excel文件。我希望导出.xlsx。在我打开之前,一切似乎都很好。下面的代码是我的导出代码。

DataTable dt = GetData(sqlcommand);

            if(dt.Rows.Count >0){
                //Create a dummy GridView
                GridView GridView1 = new GridView();
                GridView1.AllowPaging = false;
                GridView1.DataSource = dt;
                GridView1.DataBind();

                Response.Clear();
                Response.Buffer = true;
                Response.AddHeader("content-disposition", "attachment;filename=InventoryReport.xlsx");
                Response.ContentEncoding = System.Text.Encoding.Unicode;
                Response.BinaryWrite(System.Text.Encoding.Unicode.GetPreamble());
                Response.Charset = "";
                Response.ContentType = "application/vnd.openxmlformats-officedocument.spreadsheetml.sheet";
                StringWriter sw = new StringWriter();
                HtmlTextWriter hw = new HtmlTextWriter(sw);

                for (int i = 0; i < GridView1.Rows.Count; i++)
                {
                    //Apply text style to each Row
                    GridView1.Rows[i].Attributes.Add("class", "textmode");
                }
                GridView1.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();

下面的图片是我打开.xlsx文件后得到的错误。

enter image description here

我希望有人可以帮助我的工作。谢谢!!真的很感激,如果你能帮助我...非常感谢!

1 个答案:

答案 0 :(得分:0)

使用我的代码

using OfficeOpenXml;
using System.Data;
namespace Managed_Leverage_BAL
{
public static class ExcelExportHelper
{
    public static void CreateExcelFromDataSet(this DataSet dsReportData, string strFileNameWithPath, int[] DateFormatColumnNumbers = null)
    {
        if (File.Exists(strFileNameWithPath)) File.Delete(strFileNameWithPath);
        FileInfo newFile = new FileInfo(strFileNameWithPath);
        using (ExcelPackage pck = new ExcelPackage(newFile))
        {
            for (int tableIndex = 0; tableIndex < dsReportData.Tables.Count; tableIndex++)
            {
                DataTable tbl;
                tbl = dsReportData.Tables[tableIndex];
                ExcelWorksheet ws = pck.Workbook.Worksheets.Add(dsReportData.Tables[tableIndex].TableName);
                ws.Cells["A1"].LoadFromDataTable(tbl, true);
                if (tableIndex == 0)
                    for (int i = 0; i < DateFormatColumnNumbers.Count(); i++)
                    {
                        using (ExcelRange col = ws.Cells[DateFormatColumnNumbers[i], 1, DateFormatColumnNumbers[i] + tbl.Rows.Count, 1])
                        {
                            col.Style.Numberformat.Format = "dd-MMM-yyyy";
                            col.Style.HorizontalAlignment = ExcelHorizontalAlignment.Right;
                        }
                    }
                string endHeader = "A";
                for (int i = 0; i < tbl.Columns.Count - 1; i++)
                {
                    endHeader = IncrementAlphabeticCounter(endHeader);
                }
                using (ExcelRange rng = ws.Cells["A1:" + endHeader + "1"])
                {
                    rng.Style.Font.Bold = true;
                    rng.Style.Fill.PatternType = ExcelFillStyle.Solid;                      //Set Pattern for the background to Solid
                    rng.Style.Fill.BackgroundColor.SetColor(Color.FromArgb(79, 129, 189));  //Set color to dark blue
                    rng.Style.Font.Color.SetColor(Color.White);
                }
            }
            pck.Save();
        }

    }
    public static char[] CheckZ(char[] cCounter, int iPos)
    {
        if (iPos >= 0)
        {
            if (cCounter[iPos] >= 'Z')
            {
                cCounter[iPos] = 'A';
                if (iPos == 0)
                {
                    char[] array = new char[cCounter.Length + 1];
                    cCounter.CopyTo(array, 1);
                    cCounter = array;
                    cCounter[0] = 'A';
                    return cCounter;
                }
                cCounter = CheckZ(cCounter, iPos - 1);
                return cCounter;
            }
            cCounter[iPos] = (char)(cCounter[iPos] + '\x0001');
        }
        return cCounter;
    }
    public static string IncrementAlphabeticCounter(string sCounter)
    {
        if (sCounter == "")
        {
            return sCounter;
        }
        char[] cCounter = sCounter.ToCharArray();
        return new string(CheckZ(cCounter, cCounter.Length - 1));
    }
}

页面

private void Download(DataSet ds)
    {
            String strPath = Server.MapPath("~/Docs/") + "your path";
            ds.CreateExcelFromDataSet(strPath);

        Response.Clear();
        Response.AddHeader("content-disposition", "attachment;  filename=your file name.xlsx");
        Response.ContentType = "application/vnd.openxmlformats-officedocument.spreadsheetml.sheet";
        Response.TransmitFile(strPath);
        Response.Flush();
        Response.End();
     }

你需要epplus dll,在这里得到它 http://download-codeplex.sec.s-msft.com/Download/Release?ProjectName=epplus&DownloadId=813458&FileTime=130743526623500000&Build=21028