NPOI的使用学习记录(一)创建Excel和写入数据

NPOI即意为.NET平台的POI,是操作Excel的一个开源工具,被广泛的使用.

一.创建Excel文件

由于03版和07及以后版的Excel的格式不同,分别为xls,xlsx
所以他们的创建并兼容,
在NPOI中的表现为创建他们的对象不同
03版的为
HSSFWorkbook
07及以后为
XSSFWorkbook
创建时必须正确的写Excel的格式,写混的话用Excel打开的话会报文件损坏
同時创建的Excel文件又必须带有至少一个Sheet

1.创建xls

class Program
{
	public static void main()
	{
		//创建一个excel文件(工作簿)
		HSSFWorkbook workbook = new HSSFWorkbook();
		//在其中创建一张表
		ISheet sheet = work.CreateSheet("sheetOne");
		//开发一个文件流,准备写入数据
		FileStream stream = new FileStream("Test.xls",FileMode.Create);
		//写入Excel信息
		workbook.Write(stream);
		//关闭流
		stream.Close();

	}
}

2.创建xlsx

class Program
{
	public static void main()
	{
		//创建一个excel文件(工作簿)
		XSSFWorkbook workbook = new XSSFWorkbook();
		//在其中创建一张表
		ISheet sheet = work.CreateSheet("sheetOne");
		//开发一个文件流,准备写入数据
		FileStream stream = new FileStream("Test.xlsx",FileMode.Create);
		//写入Excel信息
		workbook.Write(stream);
		//关闭流
		stream.Close();

	}
}

3.添加Excel的文件描述信息

这个相关的描述信息在Excel文件右键属性中才可以看得到,如果不需要也大可忽略
在Workbook类的属性中可以设置
DocumentSummaryInformation和
SummaryInformation对象的信息,
在创建后你就可以在
xls/xlsx文件的右键属性中查看到
(XSSFWorkbook类则不可以设置描述信息,因为该类型中没有上述两个成员变量)

 static void Main(string[] args)
  {
      HSSFWorkbook workbook = new HSSFWorkbook();

      //設置文件右鍵屬性信息
      DocumentSummaryInformation document = PropertySetFactory.CreateDocumentSummaryInformation();

      SummaryInformation info = PropertySetFactory.CreateSummaryInformation();

      document.ApplicationVersion = 999; document.ByteCount = 6666; document.Category = "文件描述信息";
      document.Company = "Roman Sultan Mehmed"; document.ContentStatus = "已完成"; document.ContentType = "表格";

      info.Title = "這是一個測試的表格"; info.Author = "Sultan"; info.ApplicationName = "NPOI測試程序";

      info.OSVersion = 3;

      workbook.DocumentSummaryInformation = document;
      workbook.SummaryInformation = info;

      //--------------------------------------分割线

      ISheet sheet =  workbook.CreateSheet("sheetOne");

      FileStream fstream = new FileStream("C:/Users/F1338705/Desktop/showSummary.xls", FileMode.Create);

      workbook.Write(fstream);
      
      fstream.Close();
 }

查看属性
添加文件描述信息

二.向单元格写入数据

单元格在NPOI里表现为HSSFCell对象或XSSFCell对象,
其中重载了很多的SetCellValue(不同类型参数),以用于写入不同数据类型的值

        public void SetCellValue(DateTime value);
        public void SetCellValue(DateTime? value);
        public void SetCellValue(IRichTextString str);
        public void SetCellValue(string str);
        public void SetCellValue(double value);
        public void SetCellValue(bool value);

1.确定坐标

Excel以横纵坐标来确定单元格的位置,
NPOI也是同理,也从0开始以横纵坐标确定单元格,
只需要在sheet里指定行和列即可,

sheet.CreateRow(0).CreateCell(0).SetCellValue("12345");

(PS:使用GetCell和GetRow时要注意之前是否创建了对应的行和单元格)

2.区分类型区别

单元格的数据类型有以下几种

namespace NPOI.SS.UserModel
{
    public enum CellType
    {
        Unknown = -1,
        Numeric, 数字
        String, 字符串
        Formula, 公式
        Blank, 空白
        Boolean, 布尔
        Error 
    }
}

3.设置表头,写入DataTable

一般导出Excel都是从数据库查出的DataTable中拿数据,当然如果也可以直接讲对象集合写入(使用ORM框架的话),不过DataTable的数据时死的,实现对象集合的写入可能要使用反射。
表头一般就是Excell的第一行,用来做一些标题,分类什么的,
如果要设置合并单元格的话则需要使用sheet对象调用 .AddMergedRegion()
传入CellRangeAddress对象制定要合并区域的坐标位置
这对象只有一个构造函数,

CellRangeAddress(int firstRow, int lastRow, int firstCol, int lastCol)
//这个参数很好理解--即(firstRow,firstCol)为区域左上角的坐标,(lastRow,lastCol)为区域的右下角坐标

例:

 public class Program
    {
        public static void Main(string[] args)
        {
            SqlConnection sqlConnection = new SqlConnection("server=.;Database=EFCoreTest;uid=XXXX;pwd=XXXX");

            sqlConnection.Open();

            SqlCommand cmd = sqlConnection.CreateCommand();

            cmd.CommandText = "select * from Persons";

            SqlDataAdapter sqlDataAdapter = new SqlDataAdapter();

            sqlDataAdapter.SelectCommand = cmd;

            DataTable dataTable = new DataTable();
            
            sqlDataAdapter.Fill(dataTable);

            
            HSSFWorkbook wb = new HSSFWorkbook();   

            ISheet sheet = wb.CreateSheet("sheetOne");

            IRow title =  sheet.CreateRow(0);

            title.CreateCell(0).SetCellValue("ID属性");
            title.CreateCell(1).SetCellValue("Name");
            title.CreateCell(2).SetCellValue("Age");
            title.CreateCell(3).SetCellValue("Address");


            for(int i = 0; i < dataTable.Rows.Count; i++)
            {
                IRow temp =  sheet.CreateRow(i + 1);
                for(int j = 0;j<dataTable.Rows[i].ItemArray.Length; j++)
                {
                    temp.CreateCell(j).SetCellValue(dataTable.Rows[i][j].ToString());
                }
            }


            FileStream stream = new FileStream("C:/Users/ASUS/Desktop/Test.xls",FileMode.Create);

            wb.Write(stream);

            stream.Close();

            wb.Close();
        }

    }

在这里插入图片描述

评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

罗马苏丹默罕默德

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值