生活中我们或多或少要接触excel,那么怎样将excel集成到程序呢?下面我将做一个小demo来实现。
在c#中我们在Nuget包管理器中搜索NPOI,这是一个操作excel插件,它能够实现不需要借助office就可以生成excel文件,更轻便。
首先我们需要了解一下excel的一些细节,
1.workbook:代表excel的工作簿
2.sheet:代表excel的工作表,一个工作簿包含多个工作表。
3.Columns:代表excel表格的列
4.cell:代表excel表格的行
一下链接我将NPOI包进行了封装,包含了一些基本的excel表的操作方法,包括对表格宽度的调整
https://download.csdn.net/download/weixin_42145499/20601186
使用的是由直接将链接内的类库引用即可。
下面的讲解都依据类库进行。
首先我们需要建立一个实体类即model,命名为OrderExcelModel,其中设定订单id,订单号,订单金额,订单类型,以及订单来源等数据。其中还重写了tostring方法。
using Quickuse.Excel;
using System;
using System.Collections.Generic;
using System.Text;
namespace Quickuse.ConsoleApp
{
public class OrderExcelModel
{
[TableColumn("订单主键Id")]
public int Id { get; set; }
[TableColumnAttribute("订单号")]
public string OrderNumber { get; set; }
[TableColumnAttribute("订单金额", "金额")]
public decimal OrderAmount { get; set; }
[TableColumnAttribute("订单类型")]
public string OrderType { get; set; }
[TableColumnAttribute("订单来源")]
public int Source { get; set; }
public override string ToString()
{
return Id + "\t" + OrderAmount + "\t" + OrderNumber + "\t" + OrderAmount + "\t" + OrderType + "\t" + Source + "\t";
}
}
}
其次我们通过流的方式将数据写入excel文件中,一共六千条数据。
public static void TestExecl()
{
List<OrderExcelModel> list = new List<OrderExcelModel>();
for (int i = 0; i < 6000; i++)
{
list.Add(new OrderExcelModel
{
Id = 1,
OrderNumber = DateTime.Now.ToString("ACyyyyMMddHHmmssfff"),
OrderAmount = 888.88M,
OrderType = "电子商品",
Source = i
});
}
using (MemoryStream ms = Workbook.Export(list, "快速应用"))
{
string dir = "../../../../../file/";
using (FileStream fs = new FileStream(dir+"quickuse.xls", FileMode.Create))
{
byte[] buff = ms.ToArray();
fs.Write(buff, 0, buff.Length);
fs.Close();
ms.Close();
}
}
}
下面我们进行数据的读取。
public static void testReadExcel(string path)
{
var filestream = File.OpenRead(path);
var dataset = XWorkbook.Import(filestream);
filestream.Close();
filestream.Dispose();
var table = dataset.Tables[0];
var list2 = XWorkbook.ConvertToList<OrderExcelModel>(table);
foreach (var d in list2)
{
Console.WriteLine(d.ToString());
}
Console.WriteLine("读取成功");
}