版权声明:本文为博主原创文章,遵循 CC 4.0 BY-SA 版权协议,转载请附上原文出处链接和本声明。
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();
}