0%

.NET使用NPOI组件将数据导出Excel

.NET调用NPOI组件导入导出Excel**的操作类
**  此NPOI操作类的优点如下:
(1)支持web及winform从DataTable导出到Excel;

(2)生成速度很快;
(3)准确判断数据类型,不会出现身份证转数值等问题;
(4)如果单页条数大于65535时会新建工作表;

(5)列宽自适应;

NPOI操作类

![](https://images.cnblogs.com/OutliningIndicators/ContractedBlock.gif)![](https://images.cnblogs.com/OutliningIndicators/ExpandedBlockStart.gif)

public class NPOIHelper
{
///


/// DataTable导出到Excel文件
///

/// 源DataTable
/// 表头文本
/// 保存位置
public static void Export(DataTable dtSource, string strHeaderText, string strFileName)
{
using (MemoryStream ms = Export(dtSource, strHeaderText))
{
using (FileStream fs = new FileStream(strFileName, FileMode.Create, FileAccess.Write))
{
byte[] data = ms.ToArray();
fs.Write(data,
0, data.Length);
fs.Flush();
}
}
}

        </span><span style="color: #808080;">///</span> <span style="color: #808080;"><summary></span>
        <span style="color: #808080;">///</span><span style="color: #008000;"> DataTable导出到Excel的MemoryStream
        </span><span style="color: #808080;">///</span> <span style="color: #808080;"></summary></span>
        <span style="color: #808080;">///</span> <span style="color: #808080;"><param name="dtSource"></span><span style="color: #008000;">源DataTable</span><span style="color: #808080;"></param></span>
        <span style="color: #808080;">///</span> <span style="color: #808080;"><param name="strHeaderText"></span><span style="color: #008000;">表头文本</span><span style="color: #808080;"></param></span>
        <span style="color: #0000ff;">public</span> <span style="color: #0000ff;">static</span> MemoryStream Export(DataTable dtSource, <span style="color: #0000ff;">string</span><span style="color: #000000;"> strHeaderText)
        {
            HSSFWorkbook workbook </span>= <span style="color: #0000ff;">new</span><span style="color: #000000;"> HSSFWorkbook();
            HSSFSheet sheet </span>=<span style="color: #000000;"> workbook.CreateSheet();

            </span><span style="color: #0000ff;">#region</span> 右击文件 属性信息<span style="color: #000000;">
            {
                DocumentSummaryInformation dsi </span>=<span style="color: #000000;"> PropertySetFactory.CreateDocumentSummaryInformation();
                dsi.Company </span>= <span style="color: #800000;">"</span><span style="color: #800000;">NPOI</span><span style="color: #800000;">"</span><span style="color: #000000;">;
                workbook.DocumentSummaryInformation </span>=<span style="color: #000000;"> dsi;

                SummaryInformation si </span>=<span style="color: #000000;"> PropertySetFactory.CreateSummaryInformation();
                si.Author </span>= <span style="color: #800000;">"</span><span style="color: #800000;">文件作者信息</span><span style="color: #800000;">"</span>; <span style="color: #008000;">//</span><span style="color: #008000;">填加xls文件作者信息</span>
                si.ApplicationName = <span style="color: #800000;">"</span><span style="color: #800000;">创建程序信息</span><span style="color: #800000;">"</span>; <span style="color: #008000;">//</span><span style="color: #008000;">填加xls文件创建程序信息</span>
                si.LastAuthor = <span style="color: #800000;">"</span><span style="color: #800000;">最后保存者信息</span><span style="color: #800000;">"</span>; <span style="color: #008000;">//</span><span style="color: #008000;">填加xls文件最后保存者信息</span>
                si.Comments = <span style="color: #800000;">"</span><span style="color: #800000;">作者信息</span><span style="color: #800000;">"</span>; <span style="color: #008000;">//</span><span style="color: #008000;">填加xls文件作者信息</span>
                si.Title = <span style="color: #800000;">"</span><span style="color: #800000;">标题信息</span><span style="color: #800000;">"</span>; <span style="color: #008000;">//</span><span style="color: #008000;">填加xls文件标题信息</span>
                si.Subject = <span style="color: #800000;">"</span><span style="color: #800000;">主题信息</span><span style="color: #800000;">"</span>;<span style="color: #008000;">//</span><span style="color: #008000;">填加文件主题信息</span>
                si.CreateDateTime =<span style="color: #000000;"> DateTime.Now;
                workbook.SummaryInformation </span>=<span style="color: #000000;"> si;
            }
            </span><span style="color: #0000ff;">#endregion</span><span style="color: #000000;">

            HSSFCellStyle dateStyle </span>=<span style="color: #000000;"> workbook.CreateCellStyle();
            HSSFDataFormat format </span>=<span style="color: #000000;"> workbook.CreateDataFormat();
            dateStyle.DataFormat </span>= format.GetFormat(<span style="color: #800000;">"</span><span style="color: #800000;">yyyy-mm-dd</span><span style="color: #800000;">"</span><span style="color: #000000;">);

            </span><span style="color: #008000;">//</span><span style="color: #008000;">取得列宽</span>
            <span style="color: #0000ff;">int</span>[] arrColWidth = <span style="color: #0000ff;">new</span> <span style="color: #0000ff;">int</span><span style="color: #000000;">[dtSource.Columns.Count];
            </span><span style="color: #0000ff;">foreach</span> (DataColumn item <span style="color: #0000ff;">in</span><span style="color: #000000;"> dtSource.Columns)
            {
                arrColWidth[item.Ordinal] </span>= Encoding.GetEncoding(<span style="color: #800080;">936</span><span style="color: #000000;">).GetBytes(item.ColumnName.ToString()).Length;
            }
            </span><span style="color: #0000ff;">for</span> (<span style="color: #0000ff;">int</span> i = <span style="color: #800080;">0</span>; i < dtSource.Rows.Count; i++<span style="color: #000000;">)
            {
                </span><span style="color: #0000ff;">for</span> (<span style="color: #0000ff;">int</span> j = <span style="color: #800080;">0</span>; j < dtSource.Columns.Count; j++<span style="color: #000000;">)
                {
                    </span><span style="color: #0000ff;">int</span> intTemp = Encoding.GetEncoding(<span style="color: #800080;">936</span><span style="color: #000000;">).GetBytes(dtSource.Rows[i][j].ToString()).Length;
                    </span><span style="color: #0000ff;">if</span> (intTemp ><span style="color: #000000;"> arrColWidth[j])
                    {
                        arrColWidth[j] </span>=<span style="color: #000000;"> intTemp;
                    }
                }
            }
            </span><span style="color: #0000ff;">int</span> rowIndex = <span style="color: #800080;">0</span><span style="color: #000000;">;
            </span><span style="color: #0000ff;">foreach</span> (DataRow row <span style="color: #0000ff;">in</span><span style="color: #000000;"> dtSource.Rows)
            {
                </span><span style="color: #0000ff;">#region</span> 新建表,填充表头,填充列头,样式
                <span style="color: #0000ff;">if</span> (rowIndex == <span style="color: #800080;">10000</span> || rowIndex == <span style="color: #800080;">0</span><span style="color: #000000;">)
                {
                    </span><span style="color: #0000ff;">if</span> (rowIndex != <span style="color: #800080;">0</span><span style="color: #000000;">)
                    {
                        </span><span style="color: #0000ff;">if</span> (strHeaderText.Length > <span style="color: #800080;">0</span><span style="color: #000000;">)
                            sheet </span>=<span style="color: #000000;"> workbook.CreateSheet(strHeaderText);
                        </span><span style="color: #0000ff;">else</span><span style="color: #000000;">
                            sheet </span>=<span style="color: #000000;"> workbook.CreateSheet();
                    }

                    </span><span style="color: #0000ff;">#region</span> 表头及样式<span style="color: #000000;">
                    {
                        </span><span style="color: #0000ff;">if</span> (strHeaderText.Length > <span style="color: #800080;">0</span><span style="color: #000000;">)
                        {
                            HSSFRow headerRow </span>= sheet.CreateRow(<span style="color: #800080;">0</span><span style="color: #000000;">);
                            headerRow.HeightInPoints </span>= <span style="color: #800080;">25</span><span style="color: #000000;">;
                            headerRow.CreateCell(</span><span style="color: #800080;">0</span><span style="color: #000000;">).SetCellValue(strHeaderText);

                            HSSFCellStyle headStyle </span>=<span style="color: #000000;"> workbook.CreateCellStyle();
                            headStyle.Alignment </span>=<span style="color: #000000;"> NPOI.HSSF.UserModel.HSSFCellStyle.ALIGN_CENTER;
                            HSSFFont font </span>=<span style="color: #000000;"> workbook.CreateFont();
                            font.FontHeightInPoints </span>= <span style="color: #800080;">20</span><span style="color: #000000;">;
                            font.Boldweight </span>= <span style="color: #800080;">700</span><span style="color: #000000;">;
                            headStyle.SetFont(font);
                            headerRow.GetCell(</span><span style="color: #800080;">0</span>).CellStyle =<span style="color: #000000;"> headStyle;
                            sheet.AddMergedRegion(</span><span style="color: #0000ff;">new</span> Region(<span style="color: #800080;">0</span>, <span style="color: #800080;">0</span>, <span style="color: #800080;">0</span>, dtSource.Columns.Count - <span style="color: #800080;">1</span><span style="color: #000000;">));
                        }
                        </span><span style="color: #008000;">//</span><span style="color: #008000;">headerRow.Dispose();</span>
<span style="color: #000000;">                    }
                    </span><span style="color: #0000ff;">#endregion</span>

                    <span style="color: #0000ff;">#region</span> 列头及样式<span style="color: #000000;">
                    {
                        HSSFRow headerRow </span>= sheet.CreateRow(<span style="color: #800080;">1</span><span style="color: #000000;">);
                        HSSFCellStyle headStyle </span>=<span style="color: #000000;"> workbook.CreateCellStyle();
                        headStyle.Alignment </span>=<span style="color: #000000;"> NPOI.HSSF.UserModel.HSSFCellStyle.ALIGN_CENTER;
                        HSSFFont font </span>=<span style="color: #000000;"> workbook.CreateFont();
                        font.FontHeightInPoints </span>= <span style="color: #800080;">10</span><span style="color: #000000;">;
                        font.Boldweight </span>= <span style="color: #800080;">700</span><span style="color: #000000;">;
                        headStyle.SetFont(font);
                        </span><span style="color: #0000ff;">foreach</span> (DataColumn column <span style="color: #0000ff;">in</span><span style="color: #000000;"> dtSource.Columns)
                        {
                            headerRow.CreateCell(column.Ordinal).SetCellValue(column.ColumnName);
                            headerRow.GetCell(column.Ordinal).CellStyle </span>=<span style="color: #000000;"> headStyle;

                            </span><span style="color: #008000;">//</span><span style="color: #008000;">设置列宽</span>
                            sheet.SetColumnWidth(column.Ordinal, (arrColWidth[column.Ordinal] + <span style="color: #800080;">1</span>) * <span style="color: #800080;">256</span><span style="color: #000000;">);
                        }
                        </span><span style="color: #008000;">//</span><span style="color: #008000;"> headerRow.Dispose();</span>
<span style="color: #000000;">                    }
                    </span><span style="color: #0000ff;">#endregion</span><span style="color: #000000;">

                    rowIndex </span>= <span style="color: #800080;">2</span><span style="color: #000000;">;
                }
                </span><span style="color: #0000ff;">#endregion</span>

                <span style="color: #0000ff;">#region</span> 填充内容<span style="color: #000000;">
                HSSFRow dataRow </span>=<span style="color: #000000;"> sheet.CreateRow(rowIndex);
                </span><span style="color: #0000ff;">foreach</span> (DataColumn column <span style="color: #0000ff;">in</span><span style="color: #000000;"> dtSource.Columns)
                {
                    HSSFCell newCell </span>=<span style="color: #000000;"> dataRow.CreateCell(column.Ordinal);

                    </span><span style="color: #0000ff;">string</span> drValue =<span style="color: #000000;"> row[column].ToString();

                    </span><span style="color: #0000ff;">switch</span><span style="color: #000000;"> (column.DataType.ToString())
                    {
                        </span><span style="color: #0000ff;">case</span> <span style="color: #800000;">"</span><span style="color: #800000;">System.String</span><span style="color: #800000;">"</span>:<span style="color: #008000;">//</span><span style="color: #008000;">字符串类型</span>
                            drValue = drValue.Replace(<span style="color: #800000;">"</span><span style="color: #800000;">&</span><span style="color: #800000;">"</span>, <span style="color: #800000;">"</span><span style="color: #800000;">&</span><span style="color: #800000;">"</span><span style="color: #000000;">);
                            drValue </span>= drValue.Replace(<span style="color: #800000;">"</span><span style="color: #800000;">></span><span style="color: #800000;">"</span>, <span style="color: #800000;">"</span><span style="color: #800000;">></span><span style="color: #800000;">"</span><span style="color: #000000;">);
                            drValue </span>= drValue.Replace(<span style="color: #800000;">"</span><span style="color: #800000;"><</span><span style="color: #800000;">"</span>, <span style="color: #800000;">"</span><span style="color: #800000;"><</span><span style="color: #800000;">"</span><span style="color: #000000;">);
                            newCell.SetCellValue(drValue);
                            </span><span style="color: #0000ff;">break</span><span style="color: #000000;">;
                        </span><span style="color: #0000ff;">case</span> <span style="color: #800000;">"</span><span style="color: #800000;">System.DateTime</span><span style="color: #800000;">"</span>:<span style="color: #008000;">//</span><span style="color: #008000;">日期类型</span>
<span style="color: #000000;">                            DateTime dateV;
                            DateTime.TryParse(drValue, </span><span style="color: #0000ff;">out</span><span style="color: #000000;"> dateV);
                            newCell.SetCellValue(dateV);

                            newCell.CellStyle </span>= dateStyle;<span style="color: #008000;">//</span><span style="color: #008000;">格式化显示</span>
                            <span style="color: #0000ff;">break</span><span style="color: #000000;">;
                        </span><span style="color: #0000ff;">case</span> <span style="color: #800000;">"</span><span style="color: #800000;">System.Boolean</span><span style="color: #800000;">"</span>:<span style="color: #008000;">//</span><span style="color: #008000;">布尔型</span>
                            <span style="color: #0000ff;">bool</span> boolV = <span style="color: #0000ff;">false</span><span style="color: #000000;">;
                            </span><span style="color: #0000ff;">bool</span>.TryParse(drValue, <span style="color: #0000ff;">out</span><span style="color: #000000;"> boolV);
                            newCell.SetCellValue(boolV);
                            </span><span style="color: #0000ff;">break</span><span style="color: #000000;">;
                        </span><span style="color: #0000ff;">case</span> <span style="color: #800000;">"</span><span style="color: #800000;">System.Int16</span><span style="color: #800000;">"</span>:<span style="color: #008000;">//</span><span style="color: #008000;">整型</span>
                        <span style="color: #0000ff;">case</span> <span style="color: #800000;">"</span><span style="color: #800000;">System.Int32</span><span style="color: #800000;">"</span>:<span style="color: #008000;">//</span><span style="color: #008000;">整型</span>
                        <span style="color: #0000ff;">case</span> <span style="color: #800000;">"</span><span style="color: #800000;">System.Int64</span><span style="color: #800000;">"</span>:<span style="color: #008000;">//</span><span style="color: #008000;">整型</span>
                        <span style="color: #0000ff;">case</span> <span style="color: #800000;">"</span><span style="color: #800000;">System.Int</span><span style="color: #800000;">"</span>:<span style="color: #008000;">//</span><span style="color: #008000;">整型</span>
                            <span style="color: #0000ff;">int</span> invV = <span style="color: #800080;">0</span><span style="color: #000000;">;
                            </span><span style="color: #0000ff;">int</span>.TryParse(drValue, <span style="color: #0000ff;">out</span><span style="color: #000000;"> invV);
                            newCell.SetCellValue(invV);
                            </span><span style="color: #0000ff;">break</span><span style="color: #000000;">;

                        </span><span style="color: #0000ff;">case</span> <span style="color: #800000;">"</span><span style="color: #800000;">System.Byte</span><span style="color: #800000;">"</span><span style="color: #000000;">:
                            </span><span style="color: #0000ff;">int</span> intV = <span style="color: #800080;">0</span><span style="color: #000000;">;
                            </span><span style="color: #0000ff;">int</span>.TryParse(drValue, <span style="color: #0000ff;">out</span><span style="color: #000000;"> intV);
                            newCell.SetCellValue(intV);
                            </span><span style="color: #0000ff;">break</span><span style="color: #000000;">;
                        </span><span style="color: #0000ff;">case</span> <span style="color: #800000;">"</span><span style="color: #800000;">System.Decimal</span><span style="color: #800000;">"</span>:<span style="color: #008000;">//</span><span style="color: #008000;">浮点型                           </span>
                        <span style="color: #0000ff;">case</span> <span style="color: #800000;">"</span><span style="color: #800000;">System.Double</span><span style="color: #800000;">"</span><span style="color: #000000;">:
                            </span><span style="color: #0000ff;">double</span> doubV = <span style="color: #800080;">0</span><span style="color: #000000;">;
                            </span><span style="color: #0000ff;">double</span>.TryParse(drValue, <span style="color: #0000ff;">out</span><span style="color: #000000;"> doubV);
                            newCell.SetCellValue(doubV);
                            </span><span style="color: #0000ff;">break</span><span style="color: #000000;">;
                        </span><span style="color: #0000ff;">case</span> <span style="color: #800000;">"</span><span style="color: #800000;">System.DBNull</span><span style="color: #800000;">"</span>:<span style="color: #008000;">//</span><span style="color: #008000;">空值处理</span>
                            newCell.SetCellValue(<span style="color: #800000;">""</span><span style="color: #000000;">);
                            </span><span style="color: #0000ff;">break</span><span style="color: #000000;">;
                        </span><span style="color: #0000ff;">default</span><span style="color: #000000;">:
                            newCell.SetCellValue(</span><span style="color: #800000;">""</span><span style="color: #000000;">);
                            </span><span style="color: #0000ff;">break</span><span style="color: #000000;">;
                    }

                }
                </span><span style="color: #0000ff;">#endregion</span><span style="color: #000000;">

                rowIndex</span>++<span style="color: #000000;">;
            }
            </span><span style="color: #0000ff;">using</span> (MemoryStream ms = <span style="color: #0000ff;">new</span><span style="color: #000000;"> MemoryStream())
            {
                workbook.Write(ms);
                ms.Flush();
                ms.Position </span>= <span style="color: #800080;">0</span><span style="color: #000000;">;

                </span><span style="color: #008000;">//</span><span style="color: #008000;">sheet.Dispose();
                </span><span style="color: #008000;">//</span><span style="color: #008000;">workbook.Dispose();</span><span style="color: #008000;">//</span><span style="color: #008000;">一般只用写这一个就OK了,他会遍历并释放所有资源,但当前版本有问题所以只释放sheet</span>
                <span style="color: #0000ff;">return</span><span style="color: #000000;"> ms;
            }
        }

        </span><span style="color: #808080;">///</span> <span style="color: #808080;"><summary></span>
        <span style="color: #808080;">///</span><span style="color: #008000;"> 用于Web导出
        </span><span style="color: #808080;">///</span> <span style="color: #808080;"></summary></span>
        <span style="color: #808080;">///</span> <span style="color: #808080;"><param name="dtSource"></span><span style="color: #008000;">源DataTable</span><span style="color: #808080;"></param></span>
        <span style="color: #808080;">///</span> <span style="color: #808080;"><param name="strHeaderText"></span><span style="color: #008000;">表头文本</span><span style="color: #808080;"></param></span>
        <span style="color: #808080;">///</span> <span style="color: #808080;"><param name="strFileName"></span><span style="color: #008000;">文件名</span><span style="color: #808080;"></param></span>
        <span style="color: #0000ff;">public</span> <span style="color: #0000ff;">static</span> <span style="color: #0000ff;">void</span> ExportByWeb(DataTable dtSource, <span style="color: #0000ff;">string</span> strHeaderText, <span style="color: #0000ff;">string</span><span style="color: #000000;"> strFileName)
        {
            HttpContext curContext </span>=<span style="color: #000000;"> HttpContext.Current;

            </span><span style="color: #008000;">//</span><span style="color: #008000;"> 设置编码和附件格式</span>
            curContext.Response.ContentType = <span style="color: #800000;">"</span><span style="color: #800000;">application/vnd.ms-excel</span><span style="color: #800000;">"</span><span style="color: #000000;">;
            curContext.Response.ContentEncoding </span>=<span style="color: #000000;"> Encoding.UTF8;
            curContext.Response.Charset </span>= <span style="color: #800000;">""</span><span style="color: #000000;">;
            curContext.Response.AppendHeader(</span><span style="color: #800000;">"</span><span style="color: #800000;">Content-Disposition</span><span style="color: #800000;">"</span><span style="color: #000000;">,
                </span><span style="color: #800000;">"</span><span style="color: #800000;">attachment;filename=</span><span style="color: #800000;">"</span> +<span style="color: #000000;"> HttpUtility.UrlEncode(strFileName, Encoding.UTF8));

            curContext.Response.BinaryWrite(Export(dtSource, strHeaderText).GetBuffer());
            curContext.Response.End();
        }

        </span><span style="color: #008000;">//</span><span style="color: #008000;">public static DataTable Import(string strFileName, int sheetindex)
        </span><span style="color: #008000;">//</span><span style="color: #008000;">{
        </span><span style="color: #008000;">//</span><span style="color: #008000;">    return Import(strFileName, sheetindex);
        </span><span style="color: #008000;">//</span><span style="color: #008000;">}</span>
        <span style="color: #808080;">///</span> <span style="color: #808080;"><summary></span><span style="color: #008000;">读取excel
        </span><span style="color: #808080;">///</span><span style="color: #008000;"> 默认第一行为标头
        </span><span style="color: #808080;">///</span> <span style="color: #808080;"></summary></span>
        <span style="color: #808080;">///</span> <span style="color: #808080;"><param name="strFileName"></span><span style="color: #008000;">excel文档路径</span><span style="color: #808080;"></param></span>
        <span style="color: #808080;">///</span> <span style="color: #808080;"><returns></returns></span>
        <span style="color: #0000ff;">public</span> <span style="color: #0000ff;">static</span> DataTable Import(<span style="color: #0000ff;">string</span> strFileName, <span style="color: #0000ff;">int</span> sheetindex, <span style="color: #0000ff;">int</span> recordcount, <span style="color: #0000ff;">int</span><span style="color: #000000;"> topcount)
        {
            DataTable dt </span>= <span style="color: #0000ff;">new</span><span style="color: #000000;"> DataTable();

            HSSFWorkbook hssfworkbook;
            </span><span style="color: #0000ff;">using</span> (FileStream file = <span style="color: #0000ff;">new</span><span style="color: #000000;"> FileStream(strFileName, FileMode.Open, FileAccess.Read))
            {
                hssfworkbook </span>= <span style="color: #0000ff;">new</span><span style="color: #000000;"> HSSFWorkbook(file);
            }

            HSSFSheet sheet </span>=<span style="color: #000000;"> hssfworkbook.GetSheetAt(sheetindex);
            System.Collections.IEnumerator rows </span>=<span style="color: #000000;"> sheet.GetRowEnumerator();
            </span><span style="color: #0000ff;">if</span> (topcount == <span style="color: #800080;">0</span><span style="color: #000000;">)
                topcount </span>= <span style="color: #800080;">1</span><span style="color: #000000;">;
            HSSFRow headerRow </span>= sheet.GetRow(<span style="color: #800080;">0</span> + topcount - <span style="color: #800080;">1</span><span style="color: #000000;">);
            </span><span style="color: #0000ff;">int</span> cellCount =<span style="color: #000000;"> headerRow.LastCellNum;

            </span><span style="color: #0000ff;">for</span> (<span style="color: #0000ff;">int</span> j = <span style="color: #800080;">0</span>; j < cellCount; j++<span style="color: #000000;">)
            {
                HSSFCell cell </span>=<span style="color: #000000;"> headerRow.GetCell(j);
                </span><span style="color: #0000ff;">if</span> (cell == <span style="color: #0000ff;">null</span><span style="color: #000000;">)
                    </span><span style="color: #0000ff;">continue</span><span style="color: #000000;">;
                dt.Columns.Add(cell.ToString());
            }

            </span><span style="color: #0000ff;">for</span> (<span style="color: #0000ff;">int</span> i = (sheet.FirstRowNum + topcount); i <= sheet.LastRowNum; i++<span style="color: #000000;">)
            {
                </span><span style="color: #0000ff;">if</span> (recordcount > <span style="color: #800080;">0</span><span style="color: #000000;">)
                {
                    </span><span style="color: #0000ff;">if</span> (i > (recordcount + <span style="color: #800080;">2</span><span style="color: #000000;">))
                        </span><span style="color: #0000ff;">break</span><span style="color: #000000;">;
                }
                HSSFRow row </span>=<span style="color: #000000;"> sheet.GetRow(i);
                DataRow dataRow </span>=<span style="color: #000000;"> dt.NewRow();

                </span><span style="color: #0000ff;">for</span> (<span style="color: #0000ff;">int</span> j = row.FirstCellNum; j < cellCount; j++<span style="color: #000000;">)
                {
                    </span><span style="color: #0000ff;">if</span> (row.GetCell(j) != <span style="color: #0000ff;">null</span><span style="color: #000000;">)
                    {
                        </span><span style="color: #0000ff;">if</span>(dt.Columns.Count><span style="color: #000000;">j)
                           dataRow[j] </span>=<span style="color: #000000;"> row.GetCell(j).ToString();
                    }
                }

                dt.Rows.Add(dataRow);
            }
            </span><span style="color: #0000ff;">return</span><span style="color: #000000;"> dt;
        }

        </span><span style="color: #808080;">///</span> <span style="color: #808080;"><summary></span>
        <span style="color: #808080;">///</span><span style="color: #008000;"> 获取Sheet列信息
        </span><span style="color: #808080;">///</span> <span style="color: #808080;"></summary></span>
        <span style="color: #808080;">///</span> <span style="color: #808080;"><param name="strFileName"></param></span>
        <span style="color: #808080;">///</span> <span style="color: #808080;"><param name="sheetindex"></param></span>
        <span style="color: #808080;">///</span> <span style="color: #808080;"><param name="topcount"></param></span>
        <span style="color: #808080;">///</span> <span style="color: #808080;"><returns></returns></span>
        <span style="color: #0000ff;">public</span> <span style="color: #0000ff;">static</span> System.Collections.Generic.List<<span style="color: #0000ff;">string</span>> GetSheetColumns(<span style="color: #0000ff;">string</span> strFileName, <span style="color: #0000ff;">int</span> sheetindex, <span style="color: #0000ff;">int</span><span style="color: #000000;"> topcount)
        {

            HSSFWorkbook hssfworkbook;
            </span><span style="color: #0000ff;">using</span> (FileStream file = <span style="color: #0000ff;">new</span><span style="color: #000000;"> FileStream(strFileName, FileMode.Open, FileAccess.Read))
            {
                hssfworkbook </span>= <span style="color: #0000ff;">new</span><span style="color: #000000;"> HSSFWorkbook(file);
            }

            HSSFSheet sheet </span>=<span style="color: #000000;"> hssfworkbook.GetSheetAt(sheetindex);
            System.Collections.IEnumerator rows </span>=<span style="color: #000000;"> sheet.GetRowEnumerator();
            </span><span style="color: #0000ff;">if</span> (topcount < <span style="color: #800080;">1</span><span style="color: #000000;">)
                topcount </span>= <span style="color: #800080;">1</span><span style="color: #000000;">;
            HSSFRow headerRow </span>= sheet.GetRow(<span style="color: #800080;">0</span> + topcount - <span style="color: #800080;">1</span><span style="color: #000000;">);
            </span><span style="color: #0000ff;">int</span> cellCount =<span style="color: #000000;"> headerRow.LastCellNum;
            System.Collections.Generic.List</span><<span style="color: #0000ff;">string</span>> list = <span style="color: #0000ff;">new</span> System.Collections.Generic.List<<span style="color: #0000ff;">string</span>><span style="color: #000000;">();
            </span><span style="color: #0000ff;">for</span> (<span style="color: #0000ff;">int</span> j = <span style="color: #800080;">0</span>; j < cellCount; j++<span style="color: #000000;">)
            {
                HSSFCell cell </span>=<span style="color: #000000;"> headerRow.GetCell(j);
                </span><span style="color: #0000ff;">if</span> (cell == <span style="color: #0000ff;">null</span><span style="color: #000000;">)
                    </span><span style="color: #0000ff;">continue</span><span style="color: #000000;">;
                </span><span style="color: #0000ff;">if</span> (cell.ToString().Trim().Length > <span style="color: #800080;">0</span><span style="color: #000000;">)
                {
                    list.Add(cell.ToString());
                }
            }
            </span><span style="color: #0000ff;">return</span><span style="color: #000000;"> list;
        }

        </span><span style="color: #808080;">///</span> <span style="color: #808080;"><summary></span>
        <span style="color: #808080;">///</span> 
        <span style="color: #808080;">///</span> <span style="color: #808080;"></summary></span>
        <span style="color: #808080;">///</span> <span style="color: #808080;"><param name="strFileName"></param></span>
        <span style="color: #808080;">///</span> <span style="color: #808080;"><returns></returns></span>
        <span style="color: #0000ff;">public</span> <span style="color: #0000ff;">static</span> System.Collections.Generic.Dictionary<<span style="color: #0000ff;">int</span>, <span style="color: #0000ff;">string</span>> GetSheetList(<span style="color: #0000ff;">string</span><span style="color: #000000;"> strFileName)
        {
            HSSFWorkbook hssfworkbook;
            </span><span style="color: #0000ff;">using</span> (FileStream file = <span style="color: #0000ff;">new</span><span style="color: #000000;"> FileStream(strFileName, FileMode.Open, FileAccess.Read))
            {
                hssfworkbook </span>= <span style="color: #0000ff;">new</span><span style="color: #000000;"> HSSFWorkbook(file);
            }

            System.Collections.Generic.Dictionary</span><<span style="color: #0000ff;">int</span>, <span style="color: #0000ff;">string</span>> lists = <span style="color: #0000ff;">new</span> System.Collections.Generic.Dictionary<<span style="color: #0000ff;">int</span>, <span style="color: #0000ff;">string</span>><span style="color: #000000;">();

            </span><span style="color: #0000ff;">for</span> (<span style="color: #0000ff;">int</span> i = <span style="color: #800080;">0</span>; i < hssfworkbook.NumberOfSheets; i++<span style="color: #000000;">)
            {
                lists.Add(i, hssfworkbook.GetSheetName(i));
            }
            </span><span style="color: #0000ff;">return</span><span style="color: #000000;"> lists;
        }
    }</span>