//NPOI读取XLSX格式读取流,需要重新创建流写入
//nuget: NPOI 2.4.1 using NPOI.HSSF.UserModel; using NPOI.SS.UserModel; using NPOI.XSSF.UserModel; using System; using System.Data; using System.IO; namespace ExcelExport { class Program { static void Main(string[] args) { string path = @"1.xlsx"; DataTable dt = GetDataTable(); DataTableToExcel(dt, path); } private static DataTable GetDataTable() { var dt = new DataTable("cart"); DataColumn dc1 = new DataColumn("prizename", Type.GetType("System.String")); DataColumn dc2 = new DataColumn("point", Type.GetType("System.Int16")); DataColumn dc3 = new DataColumn("number", Type.GetType("System.Int16")); DataColumn dc4 = new DataColumn("totalpoint", Type.GetType("System.Int64")); DataColumn dc5 = new DataColumn("prizeid", Type.GetType("System.String")); DataColumn dc6 = new DataColumn("Timer", Type.GetType("System.DateTime")); dt.Columns.Add(dc1); dt.Columns.Add(dc2); dt.Columns.Add(dc3); dt.Columns.Add(dc4); dt.Columns.Add(dc5); dt.Columns.Add(dc6); //以上代码完成了DataTable的构架,但是里面是没有任何数据的 //Random r = new Random(); for (int i = 0; i < 10; i++) { //int a = r.Next(1, 100); DataRow dr = dt.NewRow(); dr["prizename"] = "娃娃" + i; dr["point"] = 10; dr["number"] = i; dr["totalpoint"] = 10; dr["prizeid"] = "001"; dr["Timer"] = DateTime.Now.AddDays(i); dt.Rows.Add(dr); } return dt; } public static bool DataTableToExcel(DataTable dt,string path) { bool result = false; IWorkbook workbook = null; FileStream fs = null; IRow row = null; ISheet sheet = null; ICell cell = null; try { if (dt != null && dt.Rows.Count > 0) { using (fs = new FileStream(path, FileMode.Open, FileAccess.ReadWrite)) { workbook = new XSSFWorkbook(fs); sheet = workbook.GetSheetAt(0);//创建一个名称为Sheet0的表 int rowCount = dt.Rows.Count;//行数 int columnCount = dt.Columns.Count;//列数 //设置每行每列的单元格, for (int i = 0; i < rowCount; i++) { row = sheet.CreateRow(i + 9);//从第多少行开始写 for (int j = 0; j < columnCount; j++) { cell = row.CreateCell(j);//excel第二行开始写入数据 cell.SetCellValue(dt.Rows[i][j].ToString()); } } using(var file2 = new FileStream(@"..\2.xlsx", FileMode.Create,FileAccess.ReadWrite)){ workbook.Write(file2); file2.Close(); } workbook.Write(fs); result = true; } } return result; } catch (Exception ex) { if (fs != null) { fs.Close(); } return false; } } } }