天天看點

NPOI導出excel

之是以特地弄一篇這個博文,是因為最近項目中引用了office導出excel的dll,之前一直導出沒有問題,結果最近老是報這個錯。

NPOI導出excel

1、Office的競争對手WPS或者是360等“流氓軟體”所為。

2、是否是某個系統更新安裝了導緻了這個錯誤。

後來第二天上班,我特地按照解除安裝WPS、重裝office的步驟做了試驗,中間每一步都有重新開機電腦。結果折騰了半個多小時還是不行,還是報一模一樣的錯。

後來索性用了一個第三方元件NPOI來導出datagridview的資料到excel檔案。

代碼如下:

1

2

3

4

5

6

7

8

9

10

11

12

13

14

15

16

17

18

19

20

21

22

23

24

25

26

27

28

29

30

31

32

33

34

35

36

37

38

39

40

41

<code>public</code> <code>void</code> <code>ExportExcel(</code><code>string</code> <code>fileName, DataGridView dgv)</code>

<code>{</code>

<code>    </code><code>string</code> <code>saveFileName = </code><code>""</code><code>;</code>

<code>    </code><code>SaveFileDialog saveDialog = </code><code>new</code> <code>SaveFileDialog();</code>

<code>    </code><code>saveDialog.DefaultExt = </code><code>"xls"</code><code>;</code>

<code>    </code><code>saveDialog.Filter = </code><code>"Excel檔案|*.xls"</code><code>;</code>

<code>    </code><code>saveDialog.FileName = fileName;</code>

<code>    </code><code>saveDialog.ShowDialog();</code>

<code>    </code><code>saveFileName = saveDialog.FileName;</code>

<code>     </code> 

<code>    </code><code>HSSFWorkbook workbook = </code><code>new</code> <code>HSSFWorkbook();</code>

<code>    </code><code>MemoryStream ms = </code><code>new</code> <code>MemoryStream();</code>

<code>    </code><code>NPOI.SS.UserModel.ISheet sheet = workbook.CreateSheet(</code><code>"Sheet1"</code><code>);</code>

<code>    </code><code>int</code> <code>rowCount = dgv.Rows.Count;</code>

<code>    </code><code>int</code> <code>colCount = dgv.Columns.Count;</code>

<code>    </code><code>for</code> <code>(</code><code>int</code> <code>i = 0; i &lt; rowCount; i++)</code>

<code>    </code><code>{</code>

<code>        </code><code>NPOI.SS.UserModel.IRow dataRow = sheet.CreateRow(i);</code>

<code>        </code><code>for</code> <code>(</code><code>int</code> <code>j = 0; j &lt; colCount; j++)</code>

<code>        </code><code>{</code>

<code>            </code><code>if</code> <code>(dgv.Columns[j].Visible &amp;&amp; dgv.Rows[i].Cells[j].Value != </code><code>null</code><code>)</code>

<code>            </code><code>{</code>

<code>                </code><code>NPOI.SS.UserModel.ICell cell = dataRow.CreateCell(j);</code>

<code>                </code><code>cell.SetCellValue(dgv.Rows[i].Cells[j].Value.ToString());</code>

<code>            </code><code>}</code>

<code>        </code><code>}</code>

<code>    </code><code>}</code>

<code>    </code><code>workbook.Write(ms);</code>

<code>    </code><code>FileStream file = </code><code>new</code> <code>FileStream(saveFileName, FileMode.Create);</code>

<code>    </code><code>workbook.Write(file);</code>

<code>    </code><code>file.Close();</code>

<code>    </code><code>workbook = </code><code>null</code><code>;</code>

<code>    </code><code>ms.Close();</code>

<code>    </code><code>ms.Dispose();</code>

<code>    </code><code>MessageBox.Show(fileName + </code><code>" 儲存成功"</code><code>, </code><code>"提示"</code><code>, MessageBoxButtons.OK);</code>

<code>}</code>

後來用了這個方法後成功的導出了excel,而且速度似乎還比以前調用office元件的方式要快一點。

本文轉自 guwei4037  51CTO部落格,原文連結:http://blog.51cto.com/csharper/1345976

下一篇: C# FTP操作類

繼續閱讀