csharp: Export or Import excel using NPOI
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的更多相关文章
- csharp: Export or Import excel using MyXls,Spire.Xls
excel 2003 (效果不太理想) using System; using System.Collections.Generic; using System.ComponentModel; usi ...
- csharp: Export DataSet into Excel and import all the Excel sheets to DataSet
/// <summary> /// Export DataSet into Excel /// </summary> /// <param name="send ...
- csharp: Export DataTable to Excel using OpenXml 2.5 in asp.net
//https://www.microsoft.com/en-us/download/details.aspx?id=5124 Open XML SDK 2.0 for Microsoft Offic ...
- Import Excel void (NPOI)
using System; using System.Collections.Generic; using System.Linq; using System.Text; using System.T ...
- ASP.NET Core 2.2 : 十六.扒一扒新的Endpoint路由方案 try.dot.net 的正确使用姿势 .Net NPOI 根据excel模板导出excel、直接生成excel .Net NPOI 上传excel文件、提交后台获取excel里的数据
ASP.NET Core 2.2 : 十六.扒一扒新的Endpoint路由方案 ASP.NET Core 从2.2版本开始,采用了一个新的名为Endpoint的路由方案,与原来的方案在使用上差别不 ...
- ASP.NET导出Excel(利用NPOI和EPPlus库,无需安装Office)
网上提供了很多Asp.net中操作Excel的方法,其中大部分是调用微软的Office组件,下面提供三个无须安装Office即可从Asp.net输出Excel的方法. 1 简单方法 //下面代码输出的 ...
- NetSuite SuiteScript 2.0 export data to Excel file(xls)
In NetSuite SuiteScript, We usually do/implement export data to CSV, that's straight forward: Collec ...
- export和import实现模块化
export和import实现模块化 阅读目录 ES6的模块化的基本规则或特点: 下面列出几种import和export的基本语法: ES6导入的模块都是属于引用: 循环依赖的问题: 浏览器兼容: 参 ...
- 【从翻译mos文章】不再用par file如果是,export or import 包含大写和小写表名称表
不再用par file如果是,export or import 包含大写和小写表名称表 参考原始: How to Export or Import Case Sensitive Tables With ...
随机推荐
- jedis:exception is java.lang.VerifyError: Bad type on operand stack
项目中需要用到缓存,经过比较后,选择了redis,客户端使用jedis连接,也使用到了spring提供的spring-data-redis.配置正确后启动tomcat,发现如下异常: ======== ...
- ubuntu tomcat 部署java web
1,安装jdk apt-get install openjdk-7-jdk 2,下载tomcat.解压到对应的文件夹 3,将xxx.war放入到 tomcat下的 webapp目录下(此目录下不要有 ...
- Spring3系列4-多个配置文件的整合
Spring3系列4-多个配置文件的整合 在大型的Spring3项目中,所有的Bean配置在一个配置文件中不易管理,也不利于团队开发,通常在开发过程中,我们会按照功能模块的不同,或者开发人员的不同,将 ...
- 基本的文件 I/O
基本的文件 I/O MSDN 抽象基类 Stream 支持读取和写入字节.Stream 集成了异步支持.其默认实现根据其相应的异步方法来定义同步读取和写入,反之亦然. 所有表示流的类都是从 Strea ...
- Android之输入框光标和Hint的位置
如图所示,要实现这一的需求,一般人的布局方式就是左边一button,右边一button,中间一个EditText,为了输入框的响应触摸范围更大往往不会把宽度设置为wrap_content,要么设置成m ...
- js 获取时间比较全,留备用(zhuan)
var myDate = new Date(); myDate.getYear(); //获取当前年份(2位) myDate.getFullYear(); //获取完整的年份(4位 ...
- MYSQL开发性能研究——批量插入的优化措施
一.我们遇到了什么问题 在标准SQL里面,我们通常会写下如下的SQL insert语句. INSERT INTO TBL_TEST (id) VALUES(1); 很显然,在MYSQL中,这样的方 ...
- ASP.NET MVC 中如何用自定义 Handler 来处理来自 AJAX 请求的 HttpRequestValidationException 错误
今天我们的项目遇到问题 为了避免跨站点脚本攻击, 默认我们项目是启用了 validateRequest,这也是 ASP.NET 的默认验证规则.项目发布后,如果 customError 启用了,则会显 ...
- jquery getJSON
function onNodeClick(data) { //只能选择体检分组 if (data.GroupType == 1) { ...
- ArcGIS如何将表连接到空间数据上
当我们有一些空间数据和一些业务数据(表),希望把业务数据和空间数据连接起来时,可以采用ArcGIS Desktop进行操作.本文将介绍如何在ArcGIS Destop中将表和空间数据关联起来. Arc ...