C#利用NOPI導出到Excel



前言



  導出Excel,對於大多數人來說應該是太簡單的了。

  並且,之前在弄機房收費的時候也用過,

  確實是沒有什麼難度。


  循環遍歷


  但是說了不怕笑話的,就這麼個功能,整整弄了兩天。


  開始的時候當然就是最傻的遍歷塞數據


  不過,不得不說的是真的是慢,如果哪個公司用這種方式,真的那就別混了


  更可笑的是,我還爲此加了個多線程,亂七八糟寫了一大堆


  當然,最後的結果肯定就是代碼全了,從新寫。



正文


  NOPI

  今天就是想簡單的提一下微軟的NOPI,挺好用的


  目的就是,給不知道的小夥伴分享一下,有這麼個東西,已經瞭解的就當我沒說。


  對於什麼excel導入、導出啊~word啊~還有什麼我也不太清楚,反正是挺好用的

  有需要的童鞋可以繼續去網絡上查看更多資料


  我就使用他的這麼一個導出Excel的小功能,進行一下簡單的闡述


  然後在說之前我先說一點注意的

  此方法不適用於數據量很大的情況的,因爲比較佔內存


  還有就是說一下效果吧,先是用那個很傻的辦法,不到兩萬條數據,字段不到十個,用了5分多鐘

  用了NOPI之後用了不到2秒鐘

  如果這還沒有引起你的注意的話,那後面也不用看了


  代碼


  首先在使用前,需要先應用幾個dll

  

  

  然後在類中還需要引用一下

  


  最後,給小夥伴們展示一下代碼(我儘可量的放了少量的代碼

  主要是怕有的童鞋,一眼看上去代碼好多,感覺此方法很麻煩,其實不然,挺簡單的)

public void ExportExcel()
{
	Entity[] list = getData();
	//Entity在這裏是一個實體集合,主要用於承載數據,你想用什麼裝數據都行
	//getData()是一個獲取數據的方法,我是直接從數據庫查出來的,這裏就不給大家看了

	//這裏,對這個剛剛獲取的數據承載體進行一下判空什麼的,我這裏也不寫了

	//下面這是對電腦中文件夾的操作和導出數據沒有直接關係,但是我還是想給大家看一下

	string filePath = System.AppDomain.CurrentDomain.BaseDirectory;
	//獲取文件的路徑,此路徑爲該程序的bin\debug下,注意我的用詞是debug下,
	//言下之意是debug後面還有一個“\”,客官們還可以自行百度,獲取其他相關路徑

	//根據項目需求,我需要將文件導出到debug下的一個文件夾中,客官可根據自身需求修改
	//判斷是否存在這麼一個文件夾,沒有的話,就創建一下。
	if(!Directory.Exists(filePath + "我是一個文件夾名"))
	{
		Directory.CreateDirectory(filePath + "我是一個文件夾名");
	}

	using(Stream fs = new FileStream(filePath + @"我是一個文件夾名\我是一個文件名.我是文件後綴名",FileModel.Create,FileAccess.Write))
	{
		XSSFWorkbook work = new XSSFWorkbook();
		//創建一個文件

		ISheet sheet = work.CreateSheet("我是一個表單名");
		//創建一個sheet,並命名
		

		//添加表頭 數 據
		IRow row = sheet.CreateRow(0);
		//創建sheet中的一行,0表示第一行

		//下面的cell是指單元格,表示上面剛剛創建的那一行中的單元格
		//其中0,1,2表示,這一行橫着數第幾個單元格,索引從0開始
		ICell cell1 = row.CreateCell(0, CellType.String);
		cell1.SetCellValue("表頭中的第一個字段");

		ICell cell2 = row.CreateCell(1, CellType.String);
		cell2.SetCellValue("表頭中的第二個字段");

		ICell cell3 = row.CreateCell(2, CellType.String);
		cell2.SetCellValue("表頭中的第三個字段");

		//添加數據,相關注釋參考 表頭
		for (int i = 0;	i < list.Count(); i++)
		{
			row = sheet.CreateRow(i + 1)
			
			cell1 = row.CreateCell(0, CellType.String);
			cell1.SetCellValue(list[i].我是實體中的某個字段名);

			cell2 = row.CreateCell(1, CellType.String);
			cell2.SetCellValue(list[i].我是實體中的某個字段名);

			cell3 = row.CreateCell(2, CellType.String);
			cell3.SetCellValue(list[i].我是實體中的某個字段名);
		}
		work.Write(fs);
	}
}


  給客官們看了代碼,之後也就沒什麼了


  不知道哪個客官有對於大數據的導出方式,我非常願意學習


結語


想說點什麼,但是那句話,不好說



發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章