C#操作Excel表
????????????本文主要介紹一下c#來操作excel表格,主要介紹我使用的,我是使用第三方提供的函數庫(NPOI)來進行excel的操作,而NPOI庫函數在其官網下,我這里就不拿出來了。
1:NPOI庫函數
NPOI庫函數下載后,解壓出來有一下幾個DLL文件,我們就是通過這幾個DLL庫文件中提供的函數來操作
2:介紹一下excel表格
????2.1: excel表格有兩種后綴名 .xls 和 .xlsx。.xls是office2007以前版本的excel表的后綴名,而.xlsx是office2007以后的excel
excel表的后綴名。
????2.2:一個excel文件表里有多個工作簿,每一個工作簿中都可以存數據,如下圖
3:通過c#來操作excel
???? 3.1:添加NPOI庫并引用命名空間
????????? ????
3.2:打開或創建一個excel表,并向里寫入數據
???
//打開或創建excel文件并向里添加數據HSSFWorkbook wk = new HSSFWorkbook();//這是用于后綴名是.xls的excel文件的操作//XSSFWorkbook wk = new XSSFWorkbook(); 這是用于后綴名是.xlsx的excel文件的操作ISheet isheet = wk.CreateSheet("Sheet1");//這是創建一個工作簿,其名字位 "Sheet1"IRow row;ICell cell;int rowIndex = 0;int cellIndex = 0;for (rowIndex = 0; rowIndex < 10; rowIndex++){row = isheet.CreateRow(rowIndex);//這個函數是創建該工作簿的第rowIndex行,并不是創建rowIndex行,從第0行開始 for (cellIndex = 0; cellIndex < 10; cellIndex++){cell = row.CreateCell(cellIndex);//這個函數是創建該工作簿第cellIndex列(即某個單元格),從第0列開始cell.SetCellValue(1);//這個函數就是向第rowIndex行和第cellIndex列放數據,此處放的是int型的數字1}}//我們excel文件的數據已經添加完了,然后我們就要把數據寫入excel中//這里我們通過FileStream類來完成(此處是文本操作,而文本操作有多重類,這里就不介紹)//對于文本的操作,需要我們自己手動的釋放資源// FileStream("2.xls", FileMode.OpenOrCreate)中的兩個參數的解釋,FileStream這里類的構造函數有很多中,不一一介紹,//"2.xls":這是指定打開或創建的excel文件的路徑和excel的名字,路徑可以是相對路徑,也可以是絕對路徑// 這里我用的是相對路徑,相對于該程序的可執行文件,即.exe文件的路徑(我這里就是在.exe所在的文件夾中的2.xls表格) // 如果用的是XSSFWorkbook創建.xlsx的excel文件的話,此處就應該是2.xlsx。//FileMode.OpenOrCreate:這是指定對2.xls這個excel文件的操作模式,這里是如果該路徑下沒有2.xls就創建,有就打開FileStream fs2 = new FileStream("2.xls", FileMode.OpenOrCreate);wk.Write(fs2);//向打開的這個2.xls文件中寫入上面添加的數據 wk.Close();//這就是釋放資源 (詳細知識請參考其它資料,這里不做解釋)fs2.Close();fs2.Dispose();//同時我們也可以不用自己手動釋放資源,使用using ,其代碼如下//using (FileStream fs = new FileStream ("2.xls",FileMode.OpenOrCreate))//{// wk.Write(fs);//向打開的這個1.xls文件中寫入并保存。 //}創建的2.xls文件和其寫入的數據如下圖:
3.3:讀取excel文件中的數據
//讀取excel中的數據
//此處我同樣是用FileStream類來讀取文件,并是用了using,不用再手動釋放資源
using (FileStream fs = File.OpenRead("1.xls"))
{
IWorkbook workbook = null;
//這里需要根據文件名格式判斷一下
//HSSF只能讀取xls的
//XSSF只能讀取xlsx格式的
if (Path.GetExtension(fs.Name) == ".xls")
{
workbook = new HSSFWorkbook(fs);
}
else if (Path.GetExtension(fs.Name) == ".xlsx")
{
workbook = new XSSFWorkbook(fs);
}
//因為Excel表中可能不止一個工作簿,這里為了演示,我們遍歷所有工作簿
//同時要注意excel的工作簿的對應關系,其工作簿也是從0開始
//工作簿位置為0時,其在excel表的最左邊,參考下面圖一
for (int h = 0; h < workbook.NumberOfSheets; h++)
{
//得到當前sheet
ISheet sheet = workbook.GetSheetAt(h);
IRow row;//
//也可以通過GetSheet(name)得到
//遍歷表中所有的行
//注意這里加1,這里得到的最后一個單元格的索引默認是從0開始的
for (int i = 0; i < sheet.LastRowNum; i++)? //對工作表每一行?
{??????????????????????
row = sheet.GetRow(i);?? //row讀入第i行數據?
if (row != null)?
{?
for (int j = 0; j < row.LastCellNum; j++)? //對工作表每一列?
{
//獲取第i行第j列數據? 其數據是通過返回string類型的來獲取
string cellValue = row.GetCell(j).ToString(); //cellValue就是第i行第j列這個單元格中的數據
richTextBox1.AppendText(cellValue + " ");
}
richTextBox1.AppendText("\r\n");
}?
}?
}
}//using
//讀取excel中的數據 //此處我同樣是用FileStream類來讀取文件,并是用了using,不用再手動釋放資源 using (FileStream fs = File.OpenRead("2.xls")) { IWorkbook workbook = null; //這里需要根據文件名格式判斷一下 //HSSF只能讀取xls的 //XSSF只能讀取xlsx格式的 if (Path.GetExtension(fs.Name) == ".xls") {
workbook = new HSSFWorkbook(fs); } else if (Path.GetExtension(fs.Name) == ".xlsx") { workbook = new XSSFWorkbook(fs); } //因為Excel表中可能不止一個工作簿,這里為了演示,我們遍歷所有工作簿 //同時要注意excel的工作簿的對應關系,其工作簿也是從0開始 //工作簿位置為0時,其在excel表的最左邊,參考下面圖一 for (int h = 0; h < workbook.NumberOfSheets;h++) { //得到當前sheet ISheet sheet = workbook.GetSheetAt(h); IRow row;// //也可以通過GetSheet(name)得到 //遍歷表中所有的行 //注意這里加1,這里得到的最后一個單元格的索引默認是從0開始的 for (int i = 0; i < sheet.LastRowNum; i++) //對工作表每一行 { row = sheet.GetRow(i); //row讀入第i行數據 if (row != null) { for (intj = 0; j < row.LastCellNum; j++) //對工作表每一列 { //獲取第i行第j列數據 其數據是通過返回string類型的來獲取 string cellValue = row.GetCell(j).ToString(); //cellValue就是第i行第j列這個單元格中的數據 richTextBox1.AppendText(cellValue + " "); } richTextBox1.AppendText("\r\n");???????????????
其從2.xls中讀取出來顯示如下:
注:excel中工作簿在excel中的位置
???????????? 圖一????
這是我自己用c#操作excel的方法,其實還有很多,也沒去研究。
同時,不知道寫得好不好,主要是自己的整理方便以后看,同時也希望對需要的朋友有所幫助。
上面的代碼拷貝下來就可以直接用,我是程序中驗證過的。代碼沒問題,如果你們不能用,可能就是庫沒添加對或其他問題。
總結
以上是生活随笔為你收集整理的C#操作Excel表的全部內容,希望文章能夠幫你解決所遇到的問題。
- 上一篇: send()函数recv()函数详解
- 下一篇: 《反脆弱:从不确定性中获益》