EPPlus读写Excel

版权声明:本文为博主原创文章,遵循 CC 4.0 BY-SA 版权协议,转载请附上原文出处链接和本声明。
本文链接: https://blog.csdn.net/qq_32157579/article/details/101628258

Excel读写类ImportExportHelper

using OfficeOpenXml;
using System.Data;
using System.IO;

namespace Test
{
    public class ImportExportHelper
    {
        /// <summary>
        /// <summary>
        /// 导入Excel(EPPlus只支持.xlsx)
        /// </summary>
        /// <param name="stream"></param>
        /// <returns></returns>
        public static DataSet ImportExcel(Stream stream)
        {
            DataSet ds = new DataSet();
            using (ExcelPackage package = new ExcelPackage(stream))
            {
                for (int i = 1; i <= package.Workbook.Worksheets.Count; i++)
                {
                    using (ExcelWorksheet worksheet = package.Workbook.Worksheets[i])
                    {
                        if (worksheet.Dimension == null)
                        {
                            continue;
                        }
                        DataTable table = new DataTable(worksheet.Name);
                        for (int rowNum = 1; rowNum <= worksheet.Dimension.End.Row; rowNum++)
                        {

                            #region 创建列
                            if (table.Columns.Count == 0)
                            {
                                #region 第一行数据作为表头
                                for (int columnNum = 1; columnNum <= worksheet.Dimension.End.Column; columnNum++)
                                {
                                    table.Columns.Add(worksheet.Cells[rowNum, columnNum].Value.ToString().Trim(), typeof(string));
                                }
                                continue;
                                #endregion
                            }
                            #endregion

                            #region 新增行
                            DataRow dr = table.NewRow();
                            for (int columnNum = 1; columnNum <= table.Columns.Count; columnNum++)
                            {
                                dr[columnNum - 1] = worksheet.Cells[rowNum, columnNum].Value.ToString().Trim();
                            }
                            table.Rows.Add(dr);
                            #endregion
                        }
                        if (table.Rows.Count >= 1)
                        {
                            ds.Tables.Add(table);
                        }
                    }
                }
            }
            return ds;
        }

        /// <summary>
        /// 导出Excel(EPPlus只支持.xlsx)
        /// </summary>
        /// <param name="table"></param>
        /// <returns></returns>
        public static byte[] ExportExcel(DataSet dataSet)
        {
            if (dataSet == null || dataSet.Tables.Count == 0)
            {
                return null;
            }
            using (MemoryStream ms = new MemoryStream())
            {
                using (ExcelPackage package = new ExcelPackage(ms))
                {
                    for (int k = 0; k < dataSet.Tables.Count; k++)
                    {
                        ExcelWorksheet worksheet = package.Workbook.Worksheets.Add("Sheet" + (k + 1));
                        worksheet.Cells["A1"].LoadFromDataTable(dataSet.Tables[k], true);
                    }
                    package.Save();
                }
                return ms.ToArray();
            }
        }
    }
}

案例代码:
页面代码

<form id="form1" runat="server" >
    <asp:FileUpload ID="fileUpload" runat="server" AllowMultiple="false" />
    <asp:Button ID="btnUpload" runat="server" Text="上传" OnClick="btnUpload_Click" />
    <asp:Button ID="btnExport" runat="server" Text="导出" OnClick="btnExport_Click" />
</form>

后台代码

/// <summary>
/// 上传
/// </summary>
/// <param name="sender"></param>
/// <param name="e"></param>
protected void btnUpload_Click(object sender, EventArgs e)
{
    if (!fileUpload.HasFile)
    {
        return;
    }
    string extension = Path.GetExtension(fileUpload.FileName);
    if ( extension != ".xlsx")
    {
        Response.Write("只支持.xlsx的Excel");
        return;
    }
    HttpPostedFile file = fileUpload.PostedFile;
    DataSet ds = ImportExportHelper.ImportExcel(file.InputStream);
}

/// <summary>
/// 导出
/// </summary>
/// <param name="sender"></param>
/// <param name="e"></param>
protected void btnExport_Click(object sender, EventArgs e)
{
    DataTable dt = new DataTable();
    dt.Columns.Add("Name", typeof(string));
    dt.Columns.Add("Age", typeof(int));
    for (int i = 0; i < 2000; i++)
    {
        dt.Rows.Add("Test" + i, i);
    }
    DataTable dt2 = new DataTable();
    dt2.Columns.Add("Subject", typeof(string));
    dt2.Columns.Add("Score", typeof(int));
    for (int i = 0; i < 200; i++)
    {
        dt2.Rows.Add("Subject" + i, 100);
    }
    DataSet ds = new DataSet();
    ds.Tables.Add(dt);
    ds.Tables.Add(dt2);
    string fileName = "测试.xlsx";
    Response.Clear();
    Response.ContentType = "application/vnd.openxmlformats-officedocument.spreadsheetml.sheet";
    Response.AddHeader("Content-Disposition", string.Format("attachment;filename={0}", fileName));
    Response.BinaryWrite(ImportExportHelper.ExportExcel(ds));
    Response.Flush();
    Response.End();
}

猜你喜欢

转载自blog.csdn.net/qq_32157579/article/details/101628258