nopi (nopi哪里下载)

数据库在服务器上,不想在服务器上装office,这个时候可以用nopi操作excel,本例先说明一下如何在在不安装Office的情况下将数据导出excel

本例需要导入NPOI.dll和NPOI.OOXML.dll,没有的可以联系我

具体代码:

using NPOI.SS.UserModel;
using NPOI.XSSF.UserModel;
using System;
using System.Data;
using System.IO;

namespace DT2Excel
{
    public partial class WebForm1 : System.Web.UI.Page
    {
        protected void Page_Load(object sender, EventArgs e)
        {
            //从数据库中或者其它地方得到数据放入dt中
            DataTable dt = GetdataFromDB("select * from users");

            //导出EXCEL
            string r = DT2Excel("D:\\2.xlsx", mydt, "PP2", true);
        }

        /// <summary>
        /// 将DataTable数据导出到excel中
        /// <para>--------------说明------------------</para>
        /// <para>string r = DT2Excel("D:\\2.xlsx",(DataTable)dataGridView1.DataSource, "PP2", true);</para>
        /// <para>------------------------------------</para>
        /// </summary>
        /// <param name="_ExcelFileName">Excel路径</param>
        /// <param name="_dt">DataTable</param>
        /// /// <param name="_SheetName">Sheet名称,默认时写""</param>
        /// <param name="_WithDtColumnName">是否导出DataTable的列名到Excel中</param>
        /// <returns></returns>
        public string DT2Excel(string _ExcelFileName, DataTable _dt, string _SheetName, bool _WithDtColumnName)
        {
            IWorkbook workbook = null;
            FileStream fs = null;

            int i = 0;
            int j = 0;
            int count = 0;
            ISheet sheet = null;

            fs = new FileStream(_ExcelFileName, FileMode.OpenOrCreate, FileAccess.ReadWrite);
            //if (_ExcelFileName.IndexOf(".xlsx") > 0) // 2007版本
            //    workbook = new XSSFWorkbook();
            //else if (_ExcelFileName.IndexOf(".xls") > 0) // 2003版本
            //    workbook = new HSSFWorkbook();
            workbook = new XSSFWorkbook();
            try
            {
                if (_SheetName == "") { _SheetName = "Sheet1"; }
                sheet = workbook.CreateSheet(_SheetName);

                if (_WithDtColumnName == true) //写入DataTable的列名
                {
                    IRow row = sheet.CreateRow(0);
                    for (j = 0; j < _dt.Columns.Count; ++j)
                    {
                        row.CreateCell(j).SetCellValue(_dt.Columns[j].ColumnName);
                    }
                    count = 1;
                }
                else
                {
                    count = 0;
                }

                for (i = 0; i < _dt.Rows.Count; ++i)
                {
                    IRow row = sheet.CreateRow(count);
                    for (j = 0; j < _dt.Columns.Count; ++j)
                    {
                        row.CreateCell(j).SetCellValue(_dt.Rows[i][j].ToString());
                    }
                    ++count;
                }
                workbook.Write(fs); //写入到excel
                return count.ToString();
            }
            catch (Exception ex)
            {
                return ex.ToString();
            }
        }
    }
}

使用方法说明:

//先准备一下数据,从数据库中或者其它地方得到数据放到datatalbe中

DataTable dt = GetdataFromDB("select * from users");

//导出EXCEL

string r = DT2Excel("D:\\2.xlsx", mydt, "PP2", true);

参数

1、导出的excel存放目录,如果是web这里的路径需要你自己处理一下怎么弄合适

2、数据datatable的ID

3、导出的excel的sheet的名称

4、导出的excel第一行是否为datatable的列名

通过这个方法最大的好处就是不用装OFFICE就能搞定,下次再研究下其它功能