码迷,mamicode.com
首页 > 其他好文 > 详细

csharp: Export or Import excel using NPOI

时间:2015-07-30 16:42:02      阅读:131      评论:0      收藏:0      [点我收藏+]

标签:

excel 2003:

using System;
using System.Collections.Generic;
using System.ComponentModel;
using System.Data;
using System.Drawing;
using System.Linq;
using System.Text;
using System.Windows.Forms;
using System.Diagnostics;
using System.Globalization;
using System.IO;
using System.Reflection;
using NPOI;
using NPOI.HSSF.UserModel; //excel 2003
using NPOI.POIFS.FileSystem;
using NPOI.SS.UserModel;

namespace NPOIExcelDemo
{

    /// <summary>
    /// 
    /// </summary>
    public partial class Form3 : Form
    {
        string extractFile = Environment.CurrentDirectory + @"\Sample.xls";
        string result = Environment.CurrentDirectory + @"\result1.xls";

        /// <summary>
        /// 
        /// </summary>
        public Form3()
        {
            InitializeComponent();
        }
        /// <summary>
        /// 涂聚文
        /// 20150730
        /// EXCEL 2003
        /// </summary>
        /// <param name="sender"></param>
        /// <param name="e"></param>
        private void Form3_Load(object sender, EventArgs e)
        {
            try
            {
                //两个文件的标题和内容要相同,所以数据都变成了字符型的 excel 2003
                string file1 = Environment.CurrentDirectory + @"\20150728工资结构.xls";
                string file2 = Environment.CurrentDirectory + @"\工资结构.xls";
                DataTable dt = new DataTable();
                string[] files = new string[] { file1, file2 };
                for (int i = 0; i < files.Length; i++)
                {
                    MergeData(files[i], dt);
                }
                ExportDataTableToExcel(dt, result);
            }
            catch (Exception ex)
            {
                MessageBox.Show(ex.Message.ToString());
            }
        }

        #region
        /// <summary>
        /// 
        /// </summary>
        /// <param name="path"></param>
        /// <param name="dt"></param>
        private static void MergeData(string extractFile, DataTable dt)
        {
            if (!File.Exists(extractFile))
            {
                MessageBox.Show(string.Format("Excel File ‘{0}‘ to extract is not found (Current Directory: {1}).", extractFile, Environment.CurrentDirectory));
                return;
            }
            // write data in workbook from xls document.
            StreamReader input = new StreamReader(extractFile);
            IWorkbook workbook = new HSSFWorkbook(new POIFSFileSystem(input.BaseStream));
            ///
            foreach (HSSFSheet sheetname in workbook)
            {
                string s = sheetname.SheetName;  //获取工作表名称
            }

            // read the current table data
            HSSFSheet sheet = (HSSFSheet)workbook.GetSheetAt(1);//第二个工作表
            // read the current row data
            HSSFRow headerRow = (HSSFRow)sheet.GetRow(0);
            // LastCellNum is the number of cells of current rows
            int cellCount = headerRow.LastCellNum;

            if (dt.Rows.Count == 0)
            {

                // build header for there is no data after the first implementation
                for (int i = headerRow.FirstCellNum; i < cellCount; i++)
                {
                    // get data as the column header of DataTable
                    DataColumn column = new DataColumn(headerRow.GetCell(i).StringCellValue);

                    dt.Columns.Add(column);
                }
            }
            else
            {

                // TODO: check if the subsequent sheet corresponds
            }
            // LastRowNum is the number of rows of current table
            int rowCount = sheet.LastRowNum + 1;
            for (int i = (sheet.FirstRowNum + 1); i < rowCount; i++)
            {
                HSSFRow row = (HSSFRow)sheet.GetRow(i);
                DataRow dataRow = dt.NewRow();
                for (int j = row.FirstCellNum; j < cellCount; j++)
                {
                    if (row.GetCell(j) != null)
                        // get data and convert them into character string type, then save them into the rows of datatable
                        dataRow[j] = row.GetCell(j).ToString(); //要判断不同的数据类型


                }
                dt.Rows.Add(dataRow);
            }
            workbook = null;
            sheet = null;
        }
        /// <summary>
        /// 
        /// </summary>
        /// <param name="dtSource"></param>
        /// <param name="strFileName"></param>
        public static void ExportDataTableToExcel(DataTable dtSource, string strFileName)
        {
            // create workbook XSSF
            HSSFWorkbook workbook = new HSSFWorkbook();
            // the table named mySheet
            HSSFSheet sheet = (HSSFSheet)workbook.CreateSheet("mySheet");
            // create the first row
            HSSFRow dataRow = (HSSFRow)sheet.CreateRow(0);
            foreach (DataColumn column in dtSource.Columns)
            {
                // create the cells in the first row, and add data into these cells circularly
                dataRow.CreateCell(column.Ordinal).SetCellValue(column.ColumnName);

            }
            //create rows on the basis of data from datatable(not including table header), and add data into cells in every row
            for (int i = 0; i < dtSource.Rows.Count; i++)
            {
                dataRow = (HSSFRow)sheet.CreateRow(i + 1);
                for (int j = 0; j < dtSource.Columns.Count; j++)
                {
                    dataRow.CreateCell(j).SetCellValue(dtSource.Rows[i][j].ToString()); //要判断不同的数据类型
                }
            }
            using (MemoryStream ms = new MemoryStream())
            {
                using (FileStream fs = new FileStream(strFileName, FileMode.Create, FileAccess.Write))
                {

                    workbook.Write(fs);// write mySheet table in xls document and save it
                }
            }
        }
        #endregion
    }
}

  excel 2007,2010

using System;
using System.Collections.Generic;
using System.ComponentModel;
using System.Data;
using System.Drawing;
using System.Linq;
using System.Text;
using System.Windows.Forms;
using System.Diagnostics;
using System.Globalization;
using System.IO;
using System.Reflection;
using NPOI;
using NPOI.SS.UserModel;
using NPOI.XSSF.UserModel; //excel 2007

namespace NPOIExcelDemo
{

    /// <summary>
    /// 
    /// </summary>
    public partial class Form1 : Form
    {
        string extractFile = Environment.CurrentDirectory + @"\Sample.xls";
        string result = Environment.CurrentDirectory + @"\result.xls";
        /// <summary>
        /// 
        /// </summary>
        public Form1()
        {
            InitializeComponent();
        }
        /// <summary>
        /// 涂聚文
        /// 20150730
        /// EXCEL 2007
        /// </summary>
        /// <param name="sender"></param>
        /// <param name="e"></param>
        private void Form1_Load(object sender, EventArgs e)
        {
            try
            {
                //两个文件的标题和内容要相同,所以数据都变成了字符型的 excel 2007
                string file1 = Environment.CurrentDirectory + @"\20150728工资结构.xlsx";
                string file2 = Environment.CurrentDirectory + @"\工资结构.xlsx";
                DataTable dt = new DataTable();
                string[] files = new string[] { file1, file2 };
                for (int i = 0; i < files.Length; i++)
                {
                    MergeData(files[i], dt);
                }
                ExportDataTableToExcel(dt, result);
            }
            catch (Exception ex)
            {
              MessageBox.Show(ex.Message.ToString());
            }
        }
      
   
        /// <summary>
        /// 
        /// </summary>
        /// <param name="path"></param>
        /// <param name="dt"></param>
        private static void MergeData(string path, DataTable dt)
        {
            // write data in workbook from xls document.
            XSSFWorkbook workbook = new XSSFWorkbook(path);
            ///
            foreach (XSSFSheet sheetname in workbook)
            {
               string s= sheetname.SheetName;
            }
            // read the current table data
            XSSFSheet sheet = (XSSFSheet)workbook.GetSheetAt(1);//第二个工作表
            // read the current row data
            XSSFRow headerRow = (XSSFRow)sheet.GetRow(0);
            // LastCellNum is the number of cells of current rows
            int cellCount = headerRow.LastCellNum;

            if (dt.Rows.Count == 0)
            {

                // build header for there is no data after the first implementation
                for (int i = headerRow.FirstCellNum; i < cellCount; i++)
                {
                    // get data as the column header of DataTable
                    DataColumn column = new DataColumn(headerRow.GetCell(i).StringCellValue);

                    dt.Columns.Add(column);
                }
            }
            else
            {

                // TODO: check if the subsequent sheet corresponds
            }
            // LastRowNum is the number of rows of current table
            int rowCount = sheet.LastRowNum + 1;
            for (int i = (sheet.FirstRowNum + 1); i < rowCount; i++)
            {
                XSSFRow row = (XSSFRow)sheet.GetRow(i);
                DataRow dataRow = dt.NewRow();
                for (int j = row.FirstCellNum; j < cellCount; j++)
                {
                    if (row.GetCell(j) != null)
                        // get data and convert them into character string type, then save them into the rows of datatable
                        dataRow[j] = row.GetCell(j).ToString();


                }
                dt.Rows.Add(dataRow);
            }
            workbook = null;
            sheet = null;
        }
        /// <summary>
        /// 
        /// </summary>
        /// <param name="dtSource"></param>
        /// <param name="strFileName"></param>
        public static void ExportDataTableToExcel(DataTable dtSource, string strFileName)
        {
            // create workbook
            XSSFWorkbook workbook = new XSSFWorkbook();
            // the table named mySheet
            XSSFSheet sheet = (XSSFSheet)workbook.CreateSheet("mySheet");
            // create the first row
            XSSFRow dataRow = (XSSFRow)sheet.CreateRow(0);
            foreach (DataColumn column in dtSource.Columns)
            {
                // create the cells in the first row, and add data into these cells circularly
                dataRow.CreateCell(column.Ordinal).SetCellValue(column.ColumnName);

            }
            //create rows on the basis of data from datatable(not including table header), and add data into cells in every row
            for (int i = 0; i < dtSource.Rows.Count; i++)
            {
                dataRow = (XSSFRow)sheet.CreateRow(i + 1);
                for (int j = 0; j < dtSource.Columns.Count; j++)
                {
                    dataRow.CreateCell(j).SetCellValue(dtSource.Rows[i][j].ToString());
                }
            }
            using (MemoryStream ms = new MemoryStream())
            {
                using (FileStream fs = new FileStream(strFileName, FileMode.Create, FileAccess.Write))
                {

                    workbook.Write(fs);// write mySheet table in xls document and save it
                }
            }
        }
        /// <summary>
        /// 
        /// </summary>
        /// <param name="cell"></param>
        /// <param name="dataFormatter"></param>
        /// <param name="formulaEvaluator"></param>
        /// <returns></returns>
        private static string GetValue(ICell cell, DataFormatter dataFormatter, IFormulaEvaluator formulaEvaluator)
        {
            string ret = string.Empty;
            if (null == cell) { return ret; }
            ret = dataFormatter.FormatCellValue(cell, formulaEvaluator);
            return ret.Replace("\n", " "); // remove line break
        }
        /// <summary>
        /// 
        /// </summary>
        /// <param name="cell"></param>
        /// <returns></returns>
        private static string GetComment(ICell cell)
        {
            string ret = string.Empty;
            if ((null == cell) || (null == cell.CellComment)) { return ret; }
            IRichTextString str = cell.CellComment.String;
            if (str != null && str.Length > 0)
            {
                ret = str.ToString();
            }
            return ret.Replace("\n", " "); // remove line break
        }
    }
}

  

csharp: Export or Import excel using NPOI

标签:

原文地址:http://www.cnblogs.com/geovindu/p/4689408.html

(0)
(0)
   
举报
评论 一句话评论(0
登录后才能评论!
© 2014 mamicode.com 版权所有  联系我们:gaon5@hotmail.com
迷上了代码!