之前操作excel的時候,用過vba;在.net直接操作過儲存格;用過oledb的方式操作。今天晚上發現了 npoi這個開源的類庫,先從別人那拿一份簡介:http://www.cnblogs.com/bestchen_1/articles/1700664.html。
我簡單寫了幾行C#代碼測試一下:
FileStream fs = new FileStream(@"C:/Documents and Settings/Administrator/案頭/test_data.xls", FileMode.OpenOrCreate);</p><p> HSSFWorkbook hssfworkbook = new HSSFWorkbook(fs, false);<br /> HSSFSheet sheet1 = hssfworkbook.GetSheet("blank");<br /> sheet1.CreateRow(0).CreateCell(0).SetCellValue("This is a Sample");<br /> int x=1;<br /> for (int i = 1; i <= 15; i++)<br /> {<br /> HSSFRow row=sheet1.CreateRow(i);<br /> for (int j = 0; j < 15; j++)<br /> {<br /> row.CreateCell(j).SetCellValue(x++);<br /> }<br /> }<br /> fs.Close();<br /> Console.WriteLine("處理完成.........");<br /> Console.ReadLine();
代碼執行了,但沒有起作用。今兒就到這吧,明天結blog,明兒五點半就得起床....
接著昨天的繼續寫,代碼改成如下:
Stopwatch sw = new Stopwatch();<br /> sw.Start();<br /> FileStream fs = new FileStream(@"C:/Documents and Settings/Administrator/案頭/test_data.xls", FileMode.OpenOrCreate);<br /> HSSFWorkbook hssfworkbook = new HSSFWorkbook(fs, false);<br /> HSSFSheet sheet1 = hssfworkbook.GetSheet("blank");<br /> sheet1.CreateRow(0).CreateCell(0).SetCellValue("This is a Sample");<br /> int x = 1;<br /> for (int i = 1; i <=65535; i++)<br /> {<br /> HSSFRow row = sheet1.CreateRow(i);<br /> for (int j = 0; j < 15; j++)<br /> {<br /> row.CreateCell(j).SetCellValue(x++);<br /> }<br /> }<br /> MemoryStream file = new MemoryStream();<br /> hssfworkbook.Write(file);<br /> fs.Close();<br /> FileStream fStream = new FileStream(@"C:/Documents and Settings/Administrator/案頭/test_data.xls", FileMode.OpenOrCreate);<br /> fStream.Write(file.GetBuffer(), 0, file.GetBuffer().Length);<br /> fStream.Close();<br /> sw.Stop();<br /> Console.WriteLine("處理完成.........");<br /> Console.WriteLine("編輯65535條記錄用時:" + sw.Elapsed.ToString());<br /> Console.ReadLine();
我做了簡要的測試,在excel2003裡插入65535行記錄大約耗時42秒,我個人認為效能蠻好的,匯出資料的代碼到蠻好上手的,但個人覺得編輯excel的時候不是很好使(現成的方法比較少),總體還是比較喜歡這個東東的,期待著它繼續發展完善。
2010-06-07續寫:
對於 HSSFSheet sheet1 = hssfworkbook.GetSheet("blank");獲得到的一張sheet表如果是空表的話,則sheet1.LastRowNum為零,即使sheet1.getRow(0)的返回結果也是null,這點和我們看到的excel肯能不是很對應,需要進行
HSSFRow row = sheet1.CreateRow(index);
row.CreateCell(j).SetCellValue(“value”);
建立了相應的儲存格之後便可以操作了。