如何使用NPOI 导出到excel和导入excel到数据库
2013-11-08 10:12
671 查看
近期一直在做如何将数据库的数据导出到excel和导入excel到数据库。
首先进入官网进行下载NPOI插件(http://npoi.codeplex.com/)。
我用的NPOI1.2.5稳定版。
使用这个网址http://tonyqus.sinaapp.com/可以查询你需要的一些资料。
我这次主要做的是数据库的数据导出到excel和导入excel到数据库。下来我说一下自己的思路。
DBToExcel
1.先建一个Model代码如下
2.将person转换成list.
3.将list转换成dataset或者datatable
publicstaticDataSetConvertToDataSet<T>(List<T>list)
{
if(list==null||list.Count<=0)
{
returnnull;
}
DataSetds=newDataSet();
DataTabledt=newDataTable(typeof(T).Name);
DataColumncolumn;
DataRowrow;
System.Reflection.PropertyInfo[]myPropertyInfo=typeof(T).GetProperties(System.Reflection.BindingFlags.Public|System.Reflection.BindingFlags.Instance);
foreach(Ttinlist)
{
if(t==null)
{
continue;
}
row=dt.NewRow();
for(inti=0,j=myPropertyInfo.Length;i<j;i++)
{
System.Reflection.PropertyInfopi=myPropertyInfo[i];
stringname=pi.Name;
if(dt.Columns[name]==null)
{
column=newDataColumn(name,pi.PropertyType);
dt.Columns.Add(column);
}
row[name]=pi.GetValue(t,null);
}
dt.Rows.Add(row);
}
ds.Tables.Add(dt);
returnds;
}
4.将Datatable转换成Excel
下面把我自己写测试类给大家看看,代码如下。
usingSystem;
usingSystem.Collections.Generic;
usingSystem.Data;
usingSystem.IO;
usingSystem.Linq;
usingSystem.Text;
usingNPOI.HPSF;
usingNPOI.HSSF.UserModel;
usingTest.Model;
namespaceTest
{
classTest
{
privatestaticstringsheetName="测试";
privatestaticstringworkName="test2";
privatestaticstringpath="D:";
publicstaticvoidMain(string[]args)
{
//ConvertToDataSet(GetData());
//前台调用
HSSFWorkbookhassfworkbook=DtToExcel(ConvertToDataSet(GetData()),sheetName,workName,path);
//a.Write(Response.OutputStream)
////替换以下两句:
//hassfworkbook.Write(HttpContext.Current.Response.outputStrem);
FileStreamfile=newFileStream(path+"/"+workName+".xls",FileMode.Create);
hassfworkbook.Write(file);
file.Close();
//DtToExcel(ConvertToDataSet(GetData()),sheetName,workName,path);
}
publicstaticList<Person>GetData()
{
Personperson=newPerson{PersonId=0};
person.PersonName="张三";
person.PersonSex="男";
person.PersonIdCard=1245896352145825841;
Personperson1=newPerson
{
PersonId=1,
PersonName="李四",
PersonSex="女",
PersonIdCard=1245896352145825841
};
Personperson2=newPerson
{
PersonId=2,
PersonName="王二",
PersonSex="男",
PersonIdCard=1245896352145825841
};
Personperson3=newPerson
{
PersonId=3,
PersonName="麻子",
PersonSex="女",
PersonIdCard=1245896352145825841
};
List<Person>list=newList<Person>();
list.Add(person);
list.Add(person1);
list.Add(person2);
list.Add(person3);
returnlist;
}
publicstaticDataSetListToDataSet<T>(List<Person>list)
{
if(list.Count==0)returnnewDataSet();
varproperties=list[0].GetType().GetProperties();
varcols=properties.Select(p=>newDataColumn(p.Name));
vardt=newDataTable();
dt.Columns.AddRange(cols.ToArray());
//list.ForEach(x=>dt.Rows.Add(properties.Select(p=>p.GetValue(x)).ToArray()));
returnnewDataSet{Tables={dt}};
}
publicstaticDataSetConvertToDataSet<T>(List<T>list)
{
if(list==null||list.Count<=0)
{
returnnull;
}
DataSetds=newDataSet();
DataTabledt=newDataTable(typeof(T).Name);
DataColumncolumn;
DataRowrow;
System.Reflection.PropertyInfo[]myPropertyInfo=typeof(T).GetProperties(System.Reflection.BindingFlags.Public|System.Reflection.BindingFlags.Instance);
foreach(Ttinlist)
{
if(t==null)
{
continue;
}
row=dt.NewRow();
for(inti=0,j=myPropertyInfo.Length;i<j;i++)
{
System.Reflection.PropertyInfopi=myPropertyInfo[i];
stringname=pi.Name;
if(dt.Columns[name]==null)
{
column=newDataColumn(name,pi.PropertyType);
dt.Columns.Add(column);
}
row[name]=pi.GetValue(t,null);
}
dt.Rows.Add(row);
}
ds.Tables.Add(dt);
returnds;
}
publicstaticHSSFWorkbookDtToExcel(DataSetds,stringsheetName,stringworkName,stringpath)
{
HSSFWorkbookhassfworkbook=newHSSFWorkbook();
DocumentSummaryInformationdsi=PropertySetFactory.CreateDocumentSummaryInformation();
dsi.Company="NPOITeam";
hassfworkbook.DocumentSummaryInformation=dsi;
SummaryInformationsi=PropertySetFactory.CreateSummaryInformation();
si.Subject="NPOISDKExample";
hassfworkbook.SummaryInformation=si;
HSSFSheetsheet1=(HSSFSheet)hassfworkbook.CreateSheet(sheetName);
HSSFRowrow;
HSSFCellcell;
//写字段名
row=(HSSFRow)sheet1.CreateRow(0);
for(inti=0;i<ds.Tables[0].Columns.Count;i++)
{
cell=(HSSFCell)row.CreateCell(i);
cell.SetCellValue(String.Format(ds.Tables[0].Columns[i].ColumnName));
}
//写记录
for(introwIndex=0;rowIndex<ds.Tables[0].Rows.Count;rowIndex++)
{
row=(HSSFRow)sheet1.CreateRow(rowIndex+1);
for(intcolIndex=0;colIndex<ds.Tables[0].Columns.Count;colIndex++)
{
cell=(HSSFCell)row.CreateCell(colIndex);
cell.SetCellValue(String.Format(ds.Tables[0].Rows[rowIndex][colIndex].ToString()));
}
}
//前台调用
//HSSFWorkbooka=.DtToExcel(....)
//a.Write(Response.OutputStream)
////替换以下两句:
//hassfworkbook.Write(HttpContext.Current.Response.outputStrem);
//FileStreamfile=newFileStream(path+"/"+workName+".cls",FileMode.Create);
//hassfworkbook.Write(file);
//file.Close();
returnhassfworkbook;
}
}
}
里面的相关信息这里不做具体的介绍详情请看http://tonyqus.sinaapp.com/tutorial教程。
ExcelDoDatatable
导入主要做到把excel转换到datatable,将datatable进行遍历即可。然后将数据插入到数据库中。如果在其中遇到什么问题,可以留言。将会尽力解答你们所遇到的问题,希望相互学习,相互提高。
首先进入官网进行下载NPOI插件(http://npoi.codeplex.com/)。
我用的NPOI1.2.5稳定版。
使用这个网址http://tonyqus.sinaapp.com/可以查询你需要的一些资料。
我这次主要做的是数据库的数据导出到excel和导入excel到数据库。下来我说一下自己的思路。
DBToExcel
1.先建一个Model代码如下
publicclassperson{ publicstringPersonId{get;set;} publicstringPersonName{get;set;} publicstringPersonSex{get;set;} publicstringPersonIdCard{get;set;} }
2.将person转换成list.
publicstaticList<Person>GetData() { Personperson=newPerson{PersonId=0}; person.PersonName="张三"; person.PersonSex="男"; person.PersonIdCard=1245896352145825841; Personperson1=newPerson { PersonId=1, PersonName="李四", PersonSex="女", PersonIdCard=1245896352145825841 }; Personperson2=newPerson { PersonId=2, PersonName="王二", PersonSex="男", PersonIdCard=1245896352145825841 }; Personperson3=newPerson { PersonId=3, PersonName="麻子", PersonSex="女", PersonIdCard=1245896352145825841 }; List<Person>list=newList<Person>(); list.Add(person); list.Add(person1); list.Add(person2); list.Add(person3); returnlist; }
3.将list转换成dataset或者datatable
publicstaticDataSetConvertToDataSet<T>(List<T>list)
{
if(list==null||list.Count<=0)
{
returnnull;
}
DataSetds=newDataSet();
DataTabledt=newDataTable(typeof(T).Name);
DataColumncolumn;
DataRowrow;
System.Reflection.PropertyInfo[]myPropertyInfo=typeof(T).GetProperties(System.Reflection.BindingFlags.Public|System.Reflection.BindingFlags.Instance);
foreach(Ttinlist)
{
if(t==null)
{
continue;
}
row=dt.NewRow();
for(inti=0,j=myPropertyInfo.Length;i<j;i++)
{
System.Reflection.PropertyInfopi=myPropertyInfo[i];
stringname=pi.Name;
if(dt.Columns[name]==null)
{
column=newDataColumn(name,pi.PropertyType);
dt.Columns.Add(column);
}
row[name]=pi.GetValue(t,null);
}
dt.Rows.Add(row);
}
ds.Tables.Add(dt);
returnds;
}
4.将Datatable转换成Excel
publicstaticHSSFWorkbookDtToExcel(DataSetds,stringsheetName,stringworkName,stringpath) { HSSFWorkbookhassfworkbook=newHSSFWorkbook(); DocumentSummaryInformationdsi=PropertySetFactory.CreateDocumentSummaryInformation(); dsi.Company="NPOITeam"; hassfworkbook.DocumentSummaryInformation=dsi; SummaryInformationsi=PropertySetFactory.CreateSummaryInformation(); si.Subject="NPOISDKExample"; hassfworkbook.SummaryInformation=si; HSSFSheetsheet1=(HSSFSheet)hassfworkbook.CreateSheet(sheetName); HSSFRowrow; HSSFCellcell; //写字段名 row=(HSSFRow)sheet1.CreateRow(0); for(inti=0;i<ds.Tables[0].Columns.Count;i++) { cell=(HSSFCell)row.CreateCell(i); cell.SetCellValue(String.Format(ds.Tables[0].Columns[i].ColumnName)); } //写记录 for(introwIndex=0;rowIndex<ds.Tables[0].Rows.Count;rowIndex++) { row=(HSSFRow)sheet1.CreateRow(rowIndex+1); for(intcolIndex=0;colIndex<ds.Tables[0].Columns.Count;colIndex++) { cell=(HSSFCell)row.CreateCell(colIndex); cell.SetCellValue(String.Format(ds.Tables[0].Rows[rowIndex][colIndex].ToString())); } } //前台调用 //HSSFWorkbooka=.DtToExcel(....) //a.Write(Response.OutputStream) ////替换以下两句: //hassfworkbook.Write(HttpContext.Current.Response.outputStrem); //FileStreamfile=newFileStream(path+"/"+workName+".cls",FileMode.Create); //hassfworkbook.Write(file); //file.Close(); returnhassfworkbook; }
下面把我自己写测试类给大家看看,代码如下。
usingSystem;
usingSystem.Collections.Generic;
usingSystem.Data;
usingSystem.IO;
usingSystem.Linq;
usingSystem.Text;
usingNPOI.HPSF;
usingNPOI.HSSF.UserModel;
usingTest.Model;
namespaceTest
{
classTest
{
privatestaticstringsheetName="测试";
privatestaticstringworkName="test2";
privatestaticstringpath="D:";
publicstaticvoidMain(string[]args)
{
//ConvertToDataSet(GetData());
//前台调用
HSSFWorkbookhassfworkbook=DtToExcel(ConvertToDataSet(GetData()),sheetName,workName,path);
//a.Write(Response.OutputStream)
////替换以下两句:
//hassfworkbook.Write(HttpContext.Current.Response.outputStrem);
FileStreamfile=newFileStream(path+"/"+workName+".xls",FileMode.Create);
hassfworkbook.Write(file);
file.Close();
//DtToExcel(ConvertToDataSet(GetData()),sheetName,workName,path);
}
publicstaticList<Person>GetData()
{
Personperson=newPerson{PersonId=0};
person.PersonName="张三";
person.PersonSex="男";
person.PersonIdCard=1245896352145825841;
Personperson1=newPerson
{
PersonId=1,
PersonName="李四",
PersonSex="女",
PersonIdCard=1245896352145825841
};
Personperson2=newPerson
{
PersonId=2,
PersonName="王二",
PersonSex="男",
PersonIdCard=1245896352145825841
};
Personperson3=newPerson
{
PersonId=3,
PersonName="麻子",
PersonSex="女",
PersonIdCard=1245896352145825841
};
List<Person>list=newList<Person>();
list.Add(person);
list.Add(person1);
list.Add(person2);
list.Add(person3);
returnlist;
}
publicstaticDataSetListToDataSet<T>(List<Person>list)
{
if(list.Count==0)returnnewDataSet();
varproperties=list[0].GetType().GetProperties();
varcols=properties.Select(p=>newDataColumn(p.Name));
vardt=newDataTable();
dt.Columns.AddRange(cols.ToArray());
//list.ForEach(x=>dt.Rows.Add(properties.Select(p=>p.GetValue(x)).ToArray()));
returnnewDataSet{Tables={dt}};
}
publicstaticDataSetConvertToDataSet<T>(List<T>list)
{
if(list==null||list.Count<=0)
{
returnnull;
}
DataSetds=newDataSet();
DataTabledt=newDataTable(typeof(T).Name);
DataColumncolumn;
DataRowrow;
System.Reflection.PropertyInfo[]myPropertyInfo=typeof(T).GetProperties(System.Reflection.BindingFlags.Public|System.Reflection.BindingFlags.Instance);
foreach(Ttinlist)
{
if(t==null)
{
continue;
}
row=dt.NewRow();
for(inti=0,j=myPropertyInfo.Length;i<j;i++)
{
System.Reflection.PropertyInfopi=myPropertyInfo[i];
stringname=pi.Name;
if(dt.Columns[name]==null)
{
column=newDataColumn(name,pi.PropertyType);
dt.Columns.Add(column);
}
row[name]=pi.GetValue(t,null);
}
dt.Rows.Add(row);
}
ds.Tables.Add(dt);
returnds;
}
publicstaticHSSFWorkbookDtToExcel(DataSetds,stringsheetName,stringworkName,stringpath)
{
HSSFWorkbookhassfworkbook=newHSSFWorkbook();
DocumentSummaryInformationdsi=PropertySetFactory.CreateDocumentSummaryInformation();
dsi.Company="NPOITeam";
hassfworkbook.DocumentSummaryInformation=dsi;
SummaryInformationsi=PropertySetFactory.CreateSummaryInformation();
si.Subject="NPOISDKExample";
hassfworkbook.SummaryInformation=si;
HSSFSheetsheet1=(HSSFSheet)hassfworkbook.CreateSheet(sheetName);
HSSFRowrow;
HSSFCellcell;
//写字段名
row=(HSSFRow)sheet1.CreateRow(0);
for(inti=0;i<ds.Tables[0].Columns.Count;i++)
{
cell=(HSSFCell)row.CreateCell(i);
cell.SetCellValue(String.Format(ds.Tables[0].Columns[i].ColumnName));
}
//写记录
for(introwIndex=0;rowIndex<ds.Tables[0].Rows.Count;rowIndex++)
{
row=(HSSFRow)sheet1.CreateRow(rowIndex+1);
for(intcolIndex=0;colIndex<ds.Tables[0].Columns.Count;colIndex++)
{
cell=(HSSFCell)row.CreateCell(colIndex);
cell.SetCellValue(String.Format(ds.Tables[0].Rows[rowIndex][colIndex].ToString()));
}
}
//前台调用
//HSSFWorkbooka=.DtToExcel(....)
//a.Write(Response.OutputStream)
////替换以下两句:
//hassfworkbook.Write(HttpContext.Current.Response.outputStrem);
//FileStreamfile=newFileStream(path+"/"+workName+".cls",FileMode.Create);
//hassfworkbook.Write(file);
//file.Close();
returnhassfworkbook;
}
}
}
里面的相关信息这里不做具体的介绍详情请看http://tonyqus.sinaapp.com/tutorial教程。
ExcelDoDatatable
usingSystem;
usingSystem.Collections.Generic;
usingSystem.Data;
usingSystem.IO;
usingSystem.Linq;
usingSystem.Text;
usingNPOI.HSSF.UserModel;
usingNPOI.SS.UserModel;
namespaceTestNopi
{
publicstaticclassNPOIExcelToTable
{
privatestaticstringpath="D:\aaa.xls";
staticvoidMain(string[]args)
{
AcquireTwoArray(ImportExcelToTable(@"path",0));
}
///<summary>
///将Excel文件中的数据读出到DataTable中(xls)
///</summary>
///<paramname="file"></param>
///<returns></returns>
publicstaticDataSetImportExcelToTable(stringpath,intindex)
{
DataSetds=newDataSet();
DataTabledt=newDataTable();
using(FileStreamfs=newFileStream(@"D:\aaa.xls",FileMode.Open,FileAccess.Read))
{
HSSFWorkbookhssfworkbook=newHSSFWorkbook(fs);
ISheetsheet=hssfworkbook.GetSheetAt(index);
//表头
IRowheader=sheet.GetRow(sheet.FirstRowNum);
List<int>columns=newList<int>();
for(inti=0;i<header.LastCellNum;i++)
{
objectobj=GetValueTypeForXls(header.GetCell(i)asHSSFCell);
if(obj==null||obj.ToString()==string.Empty)
{
dt.Columns.Add(newDataColumn("Columns"+i.ToString()));
}
else
dt.Columns.Add(newDataColumn(obj.ToString()));
columns.Add(i);
}
//数据
for(inti=sheet.FirstRowNum+1;i<=sheet.LastRowNum;i++)
{
DataRowdr=dt.NewRow();
boolhasValue=false;
foreach(intjincolumns)
{
dr[j]=GetValueTypeForXls(sheet.GetRow(i).GetCell(j)asHSSFCell);
if(dr[j]!=null&&dr[j].ToString()!=string.Empty)
{
hasValue=true;
}
}
if(hasValue)
{
dt.Rows.Add(dr);
}
}
ds.Tables.Add(dt);
}
returnds;
}
///<summary>
///获取单元格类型(xls)
///</summary>
///<paramname="cell"></param>
///<returns></returns>
privatestaticobjectGetValueTypeForXls(HSSFCellcell)
{
if(cell==null)
returnnull;
switch(cell.CellType)
{
caseCellType.BLANK://BLANK:
returnnull;
caseCellType.BOOLEAN://BOOLEAN:
returncell.BooleanCellValue;
caseCellType.NUMERIC://NUMERIC:
returncell.NumericCellValue;
caseCellType.STRING://STRING:
returncell.StringCellValue;
caseCellType.ERROR://ERROR:
returncell.ErrorCellValue;
caseCellType.FORMULA://FORMULA:
default:
return"="+cell.CellFormula;
}
}
publicstaticvoidAcquireTwoArray(DataSetds)
{
foreach(DataTabledtinds.Tables)//遍历所有的DataTable
{
foreach(DataRowdrindt.Rows)//遍历所有的行
{
foreach(DataColumndcindt.Columns)//遍历所有的列
{
Console.Write("{0},{1},{2}",dt.TableName,dc.ColumnName,dr[dc].ToString());//表名,列名,单元格数据
}
}
}
}
}
}
导入主要做到把excel转换到datatable,将datatable进行遍历即可。然后将数据插入到数据库中。如果在其中遇到什么问题,可以留言。将会尽力解答你们所遇到的问题,希望相互学习,相互提高。
相关文章推荐
- asp.net怎样使用NPOI 导出到excel和从excel导入到数据库
- 使用NPOI将Excel文件的数据导入数据库
- Excel导入导出NPOI的使用
- 使用NPOI实现word和excel的导入导出
- 使用NPOI导入导出标准的Excel
- 使用NPOI导入导出标准Excel
- 使用NPOI导入导出标准Excel
- 如何使用mysqldump命令导入导出数据库下的数据或表结构(远程or本地都适合)
- NPOI 操作数据库中数据的导入导出(Excel.xls文件) 和null数据的处理。
- C#中对Excel的操作 使用Excel公式,导入导出数据库等
- 使用NPOI导入导出标准Excel
- 使用NPOI导入导出标准Excel(源码)
- NPOI导入导出EXCEL通用类,可直接使用在WinForm项目中
- 使用NPOI导入导出Excel
- Excel操作--使用NPOI导入导出Excel为DataTable
- 使用NPOI导入导出标准Excel
- 使用NPOI导入导出标准Excel
- 使用NPOI导入导出标准Excel
- (转)使用NPOI导入导出标准Excel
- 使用NPOI导入导出标准Excel