前言
導出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);
}
}
給客官們看了代碼,之後也就沒什麼了
不知道哪個客官有對於大數據的導出方式,我非常願意學習
結語
想說點什麼,但是那句話,不好說