求npoi2.0下载汉化版下载地址

‘NPOI’ 分类的存档
作者: Tony Qu
要学习如何读取Word,还要从Word的基本结构说起。
Word的文件格式doc/docx是一种文本描述性格式,其主体是文本,其他的都是描述该文本的属性,这就和英语中的定语和补语差不多。
在此之前,我要先给大家复习下Word的文档结构,通常呢Word文档结构可以分为段落和表格(当然也会有页眉页脚,但这不是重点),而一个表格里面可以包含行和列,有行列自然会有单元格(这个NPOI用户应该非常熟悉,和Excel的概念是一模一样的),每个单元格里面又会包含段落。而每个段落里面可以包含很多个Run。下面的程序就是读取Word中所有段落(不包括表格中的段落)的遍历方式。
using (FileStream stream = File.OpenRead(filepath))
XWPFDocument doc = new XWPFDocument(stream);
foreach (var para in doc.Paragraphs)
string text = para.ParagraphT //获得文本
var runs = para.R
string styleid = para.S
for (int i = 0; i & runs.C i++)
var run = runs[i];
text = run.ToString(); //获得run的文本
这里有一句话用到了Paragraph.Style,这个是每个段落被设置的样式名称,样式分为嵌入式样式和引用样式两种,嵌入式样式是直接写在document.xml里面的样式,而引用样式是引用styles.xml里面的样式。这里的styles.xml很像web中的css文件。
如果要抽取表格中的文本,可以用下面的代码
var tables = doc.T
foreach (var table in tables)
//遍历表格
foreach (var row in table.Rows)
var c0= row.GetCell(0);
//获得单元格0
foreach (var para in c0.Paragraphs)
string text = para.ParagraphT
//处理段落
上面这段代码是我在项目中用到的,它是获得Word中所有在第0个单元格的段落的文本。
在Excel中,当你点击左边工作表名称之后,点击保存,Excel会自动记住当前的活动工作表,即默认工作表,所以如果你想打开Excel生成的xls或者xlsx文件的时候,此时显示的将会是默认的工作表,即是你所右键点击的那张,那么在NPOI中我们怎么实现设置默认工作表呢,就可以用下面的方法:
workbook.SetActiveSheet();
SetActiveSheet所需要的参数是Sheet的编号(Int),一般来说默认情况下,在没有删除过Sheet的情况下,Sheet1的编号为0,所以当我们需要设置某张表为excel默认工作表的时候,只需要知道该表的编号即可。
作者:Tony Qu
本节将介绍如何设置Word中的文本样式,如字体大小、粗体、字体、删除线等。
要记住,本节提到的所有样式都是基于XWPFRun的,你可以把XWPFRun理解成一小段文字的描述对象,这也是Word文档的特征,即文本描述性文档。
所以我们先初始化一个XWPFRun。
XWPFDocument doc = new XWPFDocument();
XWPFParagraph p1 = doc.CreateParagraph();
XWPFRun r1 = p1.CreateRun();
r1.SetText(&The quick brown fox&);
a. 设置字体和字号
r1.SetFontFamily(&Courier&);
r1.SetFontSize(20);
上面的例子我们把字体设置成了Courier, 字号是20。
r1.SetItalic(true);
r1.SetBold(true);
r1.SetStrike(true);
e. 段落对齐
这是Word中的常用术语,但这个属性是直接设置在段落对象上,而非XWPFRun上。
p1.SetAlignment(ParagraphAlignment.BOTH);
这句话相当于Word段落设置中的对齐方式设置
这里的ParagraphAlignment有很多种枚举值,如下:
public enum ParagraphAlignment
LEFT, //左对齐
CENTER, //居中
//两端对齐
DISTRIBUTE,
//分散对齐
最后别忘了把文档保存。
作者:Tony Qu
操作Word 2007我们都是用一个叫XWPF的命名空间下的类实现的。
由于XWPF并没有像XSSF实现SS的接口,所以XWPF直接使用自己的类,而不使用接口。在以后的NPOI版本中会考虑实现类似于SS的接口,以便与HWPF保持接口一致。
Word的基本单位是段落,所以我们在空文件中创建一个新段落。
XWPFDocument doc = new XWPFDocument();
XWPFParagraph p1 = doc.CreateParagraph();
Word的对象模型和Excel很不多,因为Word当初设计的时候是一种基于文本的描述性语言,即某段文本应该如何显示,字体如何等等。
比如我们可以设置段落的对齐方式:
p1.SetAlignment(ParagraphAlignment.CENTER);
还可以设置段落的边框,如设置双线边框
p1.SetBorderBottom(Borders.DOUBLE);
p1.SetBorderTop(Borders.DOUBLE);
p1.SetBorderRight(Borders.DOUBLE);
p1.SetBorderLeft(Borders.DOUBLE);
作为段落,自然可以设置文本,但Word中所有的文本并不是直接包含在段落中的,而是由Run对象保存的:
XWPFRun r1 = p1.CreateRun();
r1.SetBold(true);
r1.SetText(&The quick brown fox&);
最终的效果如下:
接下来就直接保存Word文件:
FileStream sw = File.Create(&blank.docx&);
doc.Write(sw);
sw.Close();
保存是不是和XSSF很像,那就对了,说明你开始上手了。
作者:Tony Qu
NPOI 2中沿用了NPOI 1.2.5的IDataFormat接口,所以很多格式操作你可以直接参考NPOI 1.x教程中的。
以下介绍一些新的格式设置,如把日期显示成yyyy/MM/dd hh:mm:ss的格式
这里我们用[$-409]h:mm:ss AM/PM;@作为格式,这里的[]是一种本地化格式,即把格式指定为符合409区域的格式,409指的是美国。最后的@表示如果输入的是字符串而不是数字,就直接显示原来的字符串,比如你输入的是abc,而非日期,那么就直接显示abc。这里的409其实对应的是界面里面的区域设置,这里选了美国。
具体的解释大家可以参考stackoverflow上面。
这里的代码如下:
代码中我们用当前时间DateTime.Now作为单元格的值。
IWorkbook workbook = new XSSFWorkbook();
ISheet sheet = workbook.CreateSheet(&Sheet1&);
ICell cell10 = sheet.CreateRow(9).CreateCell(0);
SetValueAndFormat(workbook, cell10, DateTime.Now, format.GetFormat(&[$-409]h:mm:ss AM/PM;@&));
static void SetValueAndFormat(IWorkbook workbook, ICell cell, int value, short formatId)
cell.SetCellValue(value);
ICellStyle cellStyle = workbook.CreateCellStyle();
cellStyle.DataFormat = formatId;
cell.CellStyle = cellS
作者:Tony Qu
NPOI 2与NPOI 1.x最大的区别莫过于支持Office 2007以上版本的标准格式,也称为OpenXML。这种格式可能普通用户比较陌生,但如果换种说法,普通用户就会很明白,OOXML格式包括xlsx, docx, pptx等,即所有后缀有x的Office格式,都是OOXML格式。而Office 2007以前的格式是xls, doc, ppt等,都是没有x后缀,虽然从扩展名上看只有字母的差别,但其实这两种格式差得不是一点点远,基本上可以用一只鸡一只鸭来形容,完全两码事。
也正是因为这种差别,NPOI 2从头实现了OOXML的文件读写库,这和NPOI 1.x是非常不同的,这也是为什么说NPOI 2支持读写xlsx,而NPOI 1只支持读写xls的原因。当然啦,因为是从头写,NPOI 2的工作量真的是不是一点点小,所以出完alpha, 出beta,正式版可能还要等个半年,望大家见谅。
NPOI 2还有一个比较明显的差别,那就是开始正式支持Word,虽然NPOI 1.x的ScratchPad里面有Word 2003的实现(即HWPF),但是一直没有正式发布,官方也一只说这个库不稳定。但新的NPOI 2中包含的XWPF是相对稳定的版本实现,所以是随NPOI 2正式版本发布的,也就是说基本上你可以放心用,至于bug么总是有的,但肯定比HWPF少很多。
NPOI 2中还提供了Extractor支持,你可以直接它来导出Excel或者Word的基本内容,即纯文本信息,甚至可以包括页眉和页脚的文本。这种抽取器的好处自然是给第三方的搜索程序提供方便,方便做文本抽取和分析,性能肯定比用Office的COM好很多。
NPOI 2还提供了一些大家一只期待的辅助功能,如复制Sheet, 复制行等,这回是官方支持哦,哈哈。
总之,NPOI各方面都会比NPOI 1.x强很多,大家赶紧来体验吧。
作者:Tony Qu
由于NPOI 2淡化了XSSF和HSSF,所以官方推荐直接使用SS命名空间中的接口来操作Excel文件,以下是一些基本操作。
NPOI 2.0将OOXML的代码放在了单独的DLL中,使用前请确保引用了以下DLL
NPOI.OOXML.dll
NPOI.OpenXml4Net.dll
NPOI.OpenXmlFormats.dll
代码中要声明以下命名空间:
using NPOI.XSSF.UserM
using NPOI.SS.UserM
创建全新的Workbook
IWorkbook workbook = new XSSFWorkbook();
保存Workbook
FileStream sw = File.Create("test.xlsx");
workbook.Write(sw);
sw.Close();
这里的workbook是IWorkbook类型的,骨子里是XSSFWorkbook类型的,下文中不再说明。
workbook.CreateSheet("Sheet A3");
workbook.RemoveSheetAt(0);
获得某个Sheet的对象
根据Sheet名字获得Sheet对象
ISheet sheet = workbook.GetSheet("Sheet1")
或者根据Sheet索引获得Sheet对象
ISheet sheet = workbook.GetSheetAt(0)
这里的参数是从0开始的Sheet索引。
本章将介绍NPOI的一些基本信息,包括以下几个部分
什么是NPOI
各Assembly的作用
1.1 什么是NPOI
NPOI,顾名思义,就是POI的.NET版本。那POI又是什么呢?POI是一套用Java写成的库,能够帮助开发者在没有安装微软Office的情况下读写Office 97-2003的文件,支持的文件格式包括xls, doc, ppt等。在本文发布时,POI的最新版本是3.5 beta 6。
NPOI 1.x是基于POI 3.x版本开发的,与poi 3.2对应的版本是NPOI 1.2,目前最新发布的版本是1.2.1,在该版本中仅支持读写Excel文件和Drawing格式,其他文件格式将在以后的版本中得到支持。
1.2 版权说明
NPOI采用的是Apache 2.0许可证(poi也是采用这个许可证),这意味着它可以被用于任何商业或非商业项目,你不用担心因为使用它而必须开放你自己的源代码,所以它对于很多从事业务系统开发的公司来说绝对是很不错的选择。
当然作为一个开源许可证,肯定也是有一些义务的,例如如果你在系统中使用NPOI,你必须保留NPOI中的所有声明信息。对于源代码的任何修改,必须做出明确的标识。
完整的apache 2.0许可证请见
1.3 相关资源
官方网站:
POIFS Browser 1.2
下载地址:
1.4 团队介绍
Tony Qu来自于中国上海,是这个项目的发起人和开发人员,时区是GMT+8,2008年9月开始了NPOI的开发,负责NPOI所有底层库的开发、测试和bug修复。
个人blog地址为
Hüseyin Tüfek?ilerli来自于土耳其的伊斯坦布尔,也是这个项目的开发人员,时区是GMT+2,2008年11月参与了NPOI的开发,主要负责POIFS Browser 1.0的开发工作。
个人blog地址为
aTao.Xiang,来自中国,2009年8月开始参与该项目,主要参与了NPOI 1.2中文版的撰写工作和推广工作
个人blog地址为
1.5 回顾与展望
目前POI版本中的HWPF(用于Word的读写库)还不是很稳定,并非正式发布版本,且负责HWPF的关键开发人员已经离开,所以NPOI可能考虑自己重新开发HWPF。另外,目前微软正在开发Open XML Format SDK,NPOI可能会放弃对ooxml的支持,当然这取决于用户的需求和Open XML Format SDK的稳定性和速度。从目前而言,NPOI有几大优势
第一,完全基于.NET 2.0,而非.NET 3.0/3.5。
第二,读写速度快(有个国外的兄弟回复说,他原来用ExcelPackage生成用了4-5个小时,现在只需要4-5分钟)
第三,稳定性好(相对于用Office OIA而言,毕竟那东西是基于Automation做的,在Server上跑个Automation的东西,想想都觉得可怕),跑过了将近1000个测试用例(来自于POI的testcase目录)
第四,API简单易用,当然这得感谢POI的设计师们
第五,完美支持Excel 2003格式(据说myxls无法正确读取xls模板,但NPOI可以),以后也许是所有Office 2003格式
希望NPOI把这些优势继续发扬下去,这样NPOI才会更有竞争力。
1.6 NPOI 1.2中各Assembly的作用
NPOI目前有好几个assembly,每个的作用各有不同,开发人员可以按需加载相应的assembly。在这里大概罗列一下:
NPOI.Util   基础辅助库
NPOI.POIFS   OLE2格式读写库
NPOI.DDF   Microsoft Drawing格式读写库
NPOI.SS   Excel公式计算库
NPOI.HPSF   OLE2的Summary Information和Document Summary Information属性读写库
NPOI.HSSF   Excel BIFF格式读写库
作者:Tony Qu
NPOI之所以强大,并不是因为它支持导出Excel,而是因为它支持导入Excel,并能“理解”OLE2文档结构,这也是其他一些Excel读写库比较弱的方面。通常,读入并理解结构远比导出来得复杂,因为导入你必须假设一切情况都是可能的,而生成你只要保证满足你自己需求就可以了,如果把导入需求和生成需求比做两个集合,那么生成需求通常都是导入需求的子集,这一规律不仅体现在Excel读写库中,也体现在pdf读写库中,目前市面上大部分的pdf库仅支持生成,不支持导入。
如果你不相信NPOI能够很好的理解OLE2文档格式,那就去下载。具体可以参考这篇文章的介绍:。当然单单理解OLE2是不够的,因为Excel文件格式是BIFF,但BIFF是以OLE2为基础的,做个很形象的比喻就是:OLE2相当于磁盘的FAT格式,BIFF相当于文件和文件夹。NPOI负责理解BIFF格式的代码基本都在HSSF命名空间里面。
好了,刚才废话了一会儿,主要是给大家打打基础,现在进入正题。
本文将以DataTable为容器读入某xls的第一个工作表的数据(最近群里面很多人问这个问题)。
在开始之前,我们先来补些基础知识。每一个xls都对应一个唯一的HSSFWorkbook,每一个HSSFWorkbook会有若干个HSSFSheet,而每一个HSSFSheet包含若干HSSFRow(Excel 2003中不得超过65535行),每一个HSSFRow又包含若干个HSSFCell(Excel 2003中不得超过256列)。
为了遍历所有的单元格,我们就得获得某一个HSSFSheet的所有HSSFRow,通常可以用HSSFSheet.GetRowEnumerator()。如果要获得某一特定行,可以直接用HSSFSheet.GetRow(rowIndex)。另外要遍历我们就必须知道边界,有一些属性我们是可以用的,比如HSSFSheet.FirstRowNum(工作表中第一个有数据行的行号)、HSSFSheet.LastRowNum(工作表中最后一个有数据行的行号)、HSSFRow.FirstCellNum(一行中第一个有数据列的列号)、HSSFRow.LastCellNum(一行中最后一个有数据列的列号)。
基础知识基本上补得差不多了,现在开工!
首先我们要准备一个用于打开文件流的函数InitializeWorkbook,由于文件读完后就没用了,所以这里直接用using(养成好习惯,呵呵)。
void InitializeWorkbook(string path)
//read the template via FileStream, it is suggested to use FileAccess.Read to prevent file lock.
//book1.xls is an Excel-2007-generated file, so some new unknown BIFF records are added.
using (FileStream file = new FileStream(path, FileMode.Open, FileAccess.Read))
hssfworkbook = new HSSFWorkbook(file);
接下来我们要开始写最重要的函数ConvertToDataTable,即把HSSF的数据放到一个DataTable中。
HSSFSheet sheet = hssfworkbook.GetSheetAt(0);
System.Collections.IEnumerator rows = sheet.GetRowEnumerator();
while (rows.MoveNext())
HSSFRow row = (HSSFRow)rows.C
//TODO::Create DataTable row
for (int i = 0; i & row.LastCellN i++)
HSSFCell cell = row.GetCell(i);
//TODO::set cell value to the cell of DataTables
上面的结构大家都应该能看懂吧,无非就是先遍历行,再遍历行中的每一列。这里引出了一个难点,由于Excel的单元格有好几种类型,类型不同显示的东西就不同,具体的类型有 布尔型、数值型、文本型、公式型、空白、错误。
public enum HSSFCellType
Unknown = -1,
NUMERIC = 0,
STRING = 1,
FORMULA = 2,
BLANK = 3,
BOOLEAN = 4,
这里的HSSFCellType描述了所有的类型,但细心的朋友可能已经发现了,这里没有日期型,这是为什么呢?这是因为Excel底层并没有一定日期型,而是通过数值型来替代,至于如何区分日期和数字,都是由文本显示的样式决定的,在NPOI中则是由HSSFDataFormat来处理。为了能够方便的获得所需要的类型所对应的文本,我们可以使用HSSFCell.ToString()来处理。
于是刚才的代码则变成了这样:
HSSFSheet sheet = hssfworkbook.GetSheetAt(0);
System.Collections.IEnumerator rows = sheet.GetRowEnumerator();
DataTable dt = new DataTable();
for (int j = 0; j & 5; j++)
dt.Columns.Add(Convert.ToChar(((int)'A')+j).ToString());
while (rows.MoveNext())
HSSFRow row = (HSSFRow)rows.C
DataRow dr = dt.NewRow();
for (int i = 0; i & row.LastCellN i++)
HSSFCell cell = row.GetCell(i);
if (cell == null)
dr[i] = cell.ToString();
dt.Rows.Add(dr);
是不是很简单,呵呵!
当然,如果你要对某个特定的单元格类型做特殊处理,可以通过判HSSFCell.CellType来解决,比如下面的代码:
switch(cell.CellType)
case HSSFCellType.BLANK:
dr[i] = &[null]&;
case HSSFCellType.BOOLEAN:
dr[i] = cell.BooleanCellV
case HSSFCellType.NUMERIC:
dr[i] = cell.ToString();
//This is a trick to get the correct value of the cell. NumericCellValue will return a numeric value no matter the cell value is a date or a number.
case HSSFCellType.STRING:
dr[i] = cell.StringCellV
case HSSFCellType.ERROR:
dr[i] = cell.ErrorCellV
case HSSFCellType.FORMULA:
dr[i] = &=&+cell.CellF
这里只是举个简单的例子。
完整代码下载:
注意,此代码中不包括NPOI的assembly,否则文件会很大,所以建议去下载。
作者:Tony Qu
尽管NPOI能够从头开始生成Excel文件,但在实际生产环境中有很多现成的表格,我们不可能没事就去从头开始生成一个Excel,更多时候我们更愿意选择比较偷懒的方法——那就是用模板文件。NPOI一大特色之一就是能够轻松读取Office Excel 97-2003的格式,即使里面有NPOI不支持的VBA宏、图表以及Pivot表之类的高级记录,NPOI也能够保证不丢失数据(说实话,要完全能够识别所有的Excel内部记录几乎是不可能的,更何况如今又多出了Office Excel 2007 binary file,即.xlsb)。
现在我们转入正题,出于演示目的,我做了一个简单的销售量表,里面应用了文字颜色、背景色、文本居中、公式、千分位分隔符、边框等效果,当然实际的生产环境里可能还有更加复杂的Excel模板。如下图
我们的程序就是要填充12个月的销售量,Total能够自动根据填充的值计算出总量。
(这里要提一下,以往如果我们用HTML方式输出xls,我们必须在服务器端做Total计算,并且这个值在下载后永远都是静态的,没有公式,即使用户要修改里面的数据,总值也不会改变。这也是为什么NPOI一直提倡生成真正的Excel文件。)
代码其实很简单:
//read the template via FileStream, it is suggested to use FileAccess.Read to prevent file lock.
//book1.xls is an Excel-2007-generated file, so some new unknown BIFF records are added.
FileStream file = new FileStream(@&template/book1.xls&, FileMode.Open,FileAccess.Read);
HSSFWorkbook hssfworkbook = new HSSFWorkbook(file);
HSSFSheet sheet1 = hssfworkbook.GetSheet(&Sheet1&);
sheet1.GetRow(1).GetCell(1).SetCellValue(200200);
sheet1.GetRow(2).GetCell(1).SetCellValue(300);
sheet1.GetRow(3).GetCell(1).SetCellValue(500050);
sheet1.GetRow(4).GetCell(1).SetCellValue(8000);
sheet1.GetRow(5).GetCell(1).SetCellValue(110);
sheet1.GetRow(6).GetCell(1).SetCellValue(100);
sheet1.GetRow(7).GetCell(1).SetCellValue(200);
sheet1.GetRow(8).GetCell(1).SetCellValue(210);
sheet1.GetRow(9).GetCell(1).SetCellValue(2300);
sheet1.GetRow(10).GetCell(1).SetCellValue(240);
sheet1.GetRow(11).GetCell(1).SetCellValue(180123);
sheet1.GetRow(12).GetCell(1).SetCellValue(150);
//Force excel to recalculate all the formula while open
sheet1.ForceFormulaRecalculation =
FileStream file = new FileStream(@&test.xls&, FileMode.Create);
hssfworkbook.Write(file);
file.Close();
首先打开模板文件时要使用FileAccess.Read,这样可以保证文件不被占用。
这里的ForceFormulaRecalculation是强制要求Excel在打开时重新计算的属性,在拥有公式的xls文件中十分有用,大家使用时可别忘了设。
是不是比你想象的简单?你甚至不用去了解它是在何时读取文件内容的,对于NPOI的使用者来说基本上和读取普通文件没有什么两样。
最终生成的效果如下所示:
发现了没,就连千分位分隔符也都保留着,一切就像人工填写的一样。
本范例完整代码请见NPOI.Examples中的GenerateXlsFromXlsTemplate项目。
2015 年三月
9101112131415
16171819202122
23242526272829NPOI使用手册_百度文库
两大类热门资源免费畅读
续费一年阅读会员,立省24元!
评价文档:
&&¥3.00
喜欢此文档的还喜欢
NPOI使用手册
阅读已结束,如果下载本文需要使用
想免费下载本文?
把文档贴到Blog、BBS或个人站等:
普通尺寸(450*500pix)
较大尺寸(630*500pix)
你可能喜欢NPOI(2.0)修改Excel 07版时,保存后 样式会丢失??_百度知道
NPOI(2.0)修改Excel 07版时,保存后 样式会丢失??
修改03的没问题
我有更好的答案
按默认排序
看看官网有没有新的DLL发布,我现在在用的是2.0.1.0
其他类似问题
npoi的相关知识
等待您来回答
下载知道APP
随时随地咨询
出门在外也不愁& NPOI 1.2.5 教程 &#.6 从Excel文件提取图片
NPOI 1.2.5 教程 &#.6 从Excel文件提取图片
作者:Tony Qu
本节讲给大家讲解如何从Excel文件提取图片,这个问题是最近我被群友问及最多的问题,所以在这里说明下。
对于这个功能,NPOI提供了非常方便的方法IWorkbook.GetAllPictures(),这个方法返回的是一个IList,里面的数据是HSSFPictureData类型的。
由于导出的图片类型可能不同,你可以调用HSSFPictureData.SuggestFileExtension()来协助判断图片的格式,这个方法返回的是字符串类型。
IList pictures = hssfworkbook.GetAllPictures();
int i = 0;
foreach (HSSFPictureData pic in pictures)
string ext = pic.SuggestFileExtension();
if (ext.Equals(&jpeg&))
Image jpg = Image.FromStream(new MemoryStream(pic.Data));
jpg.Save(string.Format(&pic{0}.jpg&,i++));
else if (ext.Equals(&png&))
Image png = Image.FromStream(new MemoryStream(pic.Data));
png.Save(string.Format(&pic{0}.png&, i++));
这段代码只判断了jpeg和png两种格式,如果有遗漏你可以根据实际情况增加其他的文件格式判断。
以上代码出自范例NPOIExamples.ExtractPicturesFromXls。
本文目前尚无任何 trackbacks 和 pingbacks.
2015 年三月
9101112131415
16171819202122
232425262728298265人阅读
下载npoi2.0.1dll文件:
百度云盘下载链接:
& & & &public static void test1()
& & & & & &NpoiHelper np = new NpoiHelper();
& & & & & &DataTable dt1 = np.ReadExcel(AppDomain.CurrentDomain.BaseDirectory + &1测试数据.xls&, 2).Tables[0];//读;式数据
& & & & & &DataSet ds1 = new DataSet();
& & & & & &ds1.Tables.Add(dt1.Copy());
& & & & & &ds1.AcceptChanges();
& & & & & &string SaveFileName = &output1.xls&;
& & & & & &np.CreateExcel2003(SaveFileName, &sheet001&, ds1, 0);//写;式数据
& & & &public static void test2()
& & & & & &NpoiHelper np = new NpoiHelper();
& & & & & &DataTable dt1 = np.ReadExcel(AppDomain.CurrentDomain.BaseDirectory + &2测试数据.xlsx&, 2).Tables[0];//读;式数据
& & & & & &DataSet ds1 = new DataSet();
& & & & & &ds1.Tables.Add(dt1.Copy());
& & & & & &ds1.AcceptChanges();
& & & & & &string SaveFileName = &output2.xlsx&;
& & & & & &np.CreateExcel2007(SaveFileName, &sheet001&, ds1, 0);//写;式数据
& & & & & &Console.ReadKey();
using System.Collections.G
using System.T
using System.IO;
using NPOI.HSSF.UserM
using System.D
using System.C
using System.D
using NPOI.HSSF.U
using NPOI.SS.UserM
using NPOI.HPSF;
using NPOI.XSSF.UserM
& &/// &summary&
& &/// Excel文件到DataSet的转换类
& &/// &/summary&
& &public class NpoiHelper
& & & &#region 读取Excel文件内容转换为DataSet
& & & &/// &summary&
& & & &/// 读取Excel文件内容转换为DataSet,列名依次为 &c0&……c[columnlength-1]
& & & &/// &/summary&
& & & &/// &param name=&FileName&&文件绝对路径&/param&
& & & &/// &param name=&startRow&&数据开始行数(1为第一行)&/param&
& & & &/// &param name=&ColumnDataType&&每列的数据类型&/param&
& & & &/// &returns&&/returns&
& & & &public DataSet ReadExcel(string FileName, int startRow, params NpoiDataType[] ColumnDataType)
& & & & & &int ertime = 0;
& & & & & &int intime = 0;
& & & & & &DataSet ds = new DataSet(&ds&);
& & & & & &DataTable dt = new DataTable(&dt&);
& & & & & &DataR
& & & & & &StringBuilder sb = new StringBuilder();
& & & & & &using (FileStream stream = new FileStream(@FileName, FileMode.Open, FileAccess.Read))
& & & & & &{
& & & & & & & &IWorkbook workbook = WorkbookFactory.Create(stream);//使用接口,自动识别excel格式
& & & & & & & &ISheet sheet = workbook.GetSheetAt(0);//得到里面第一个sheet
& & & & & & & &
& & & & & & & &IR
& & & & & & & &#region ColumnDataType赋值
& & & & & & & &if (ColumnDataType.Length &= 0)
& & & & & & & &{
& & & & & & & & & &row = sheet.GetRow(startRow - 1);//得到第i行
& & & & & & & & & &ColumnDataType = new NpoiDataType[row.LastCellNum];
& & & & & & & & & &for (int i = 0; i & row.LastCellN i++)
& & & & & & & & & &{
& & & & & & & & & & & &ICell hs = row.GetCell(i);
& & & & & & & & & & & &ColumnDataType[i] = GetCellDataType(hs);
& & & & & & & & & &}
& & & & & & & &}
& & & & & & & &#endregion
& & & & & & & &for (j = 0; j & ColumnDataType.L j++)
& & & & & & & &{
& & & & & & & & & &Type tp = GetDataTableType(ColumnDataType[j]);
& & & & & & & & & &dt.Columns.Add(&c& + j, tp);
& & & & & & & &}
& & & & & & & &for (int i = startRow - 1; i &= sheet.PhysicalNumberOfR i++)
& & & & & & & &{
& & & & & & & & & &row = sheet.GetRow(i);//得到第i行
& & & & & & & & & &if (row == null)
& & & & & & & & & &try
& & & & & & & & & &{
& & & & & & & & & & & &dr = dt.NewRow();
& & & & & & & & & & & &for (j = 0; j & ColumnDataType.L j++)
& & & & & & & & & & & &{
& & & & & & & & & & & & & &dr[&c& + j] = GetCellData(ColumnDataType[j], row, j);
& & & & & & & & & & & &}
& & & & & & & & & & & &dt.Rows.Add(dr);
& & & & & & & & & & & &intime++;
& & & & & & & & & &}
& & & & & & & & & &catch (Exception er)
& & & & & & & & & &{
& & & & & & & & & & & &ertime++;
& & & & & & & & & & & &sb.Append(string.Format(&第{0}行出错:{1}\r\n&, i + 1, er.Message));
& & & & & & & & & & & &
& & & & & & & & & &}
& & & & & & & &}
& & & & & & & &ds.Tables.Add(dt);
& & & & & &}
& & & & & &if (ds.Tables[0].Rows.Count == 0 && sb.ToString() != &&) throw new Exception(sb.ToString());
& & & & & &
& & & &#endregion
& & & &Color LevelOneColor = Color.G
& & & &Color LevelTwoColor = Color.FromArgb(201, 217, 243);
& & & &Color LevelThreeColor = Color.FromArgb(231, 238, 248);
& & & &Color LevelFourColor = Color.FromArgb(232, 230, 231);
& & & &Color LevelFiveColor = Color.FromArgb(250, 252, 213);
& & & &#region 从DataSet导出到MemoryStream流2003
& & & &/// &summary&
& & & &/// 从DataSet导出到MemoryStream流2003
& & & &/// &/summary&
& & & &/// &param name=&SaveFileName&&文件保存路径&/param&
& & & &/// &param name=&SheetName&&Excel文件中的Sheet名称&/param&
& & & &/// &param name=&ds&&存储数据的DataSet&/param&
& & & &/// &param name=&startRow&&从哪一行开始写入,从0开始&/param&
& & & &/// &param name=&datatypes&&DataSet中的各列对应的数据类型&/param&
& & & &public bool CreateExcel2003(string SaveFileName, string SheetName, DataSet ds, int startRow, params NpoiDataType[] datatypes)
& & & & & &try
& & & & & &{
& & & & & & & &if (startRow & 0) startRow = 0;
& & & & & & & &HSSFWorkbook wb = new HSSFWorkbook();
& & & & & & & &wb = new HSSFWorkbook();
& & & & & & & &DocumentSummaryInformation dsi = PropertySetFactory.CreateDocumentSummaryInformation();
& & & & & & & &pany = &pkm&;
& & & & & & & &SummaryInformation si = PropertySetFactory.CreateSummaryInformation();
& & & & & & & &si.Title =
& & & & & & & &si.Subject = &automatic genereted document&;
& & & & & & & &si.Author = &pkm&;
& & & & & & & &wb.DocumentSummaryInformation =
& & & & & & & &wb.SummaryInformation =
& & & & & & & &ISheet sheet = wb.CreateSheet(SheetName);
& & & & & & & &//sheet.SetColumnWidth(0, 50 * 256);
& & & & & & & &//sheet.SetColumnWidth(1, 100 * 256);
& & & & & & & &IR
& & & & & & & &IC
& & & & & & & &DataR
& & & & & & & &
& & & & & & & &int maxLength = 0;
& & & & & & & &int curLength = 0;
& & & & & & & &object columnV
& & & & & & & &DataTable dt = ds.Tables[0];
& & & & & & & &if (datatypes.Length & dt.Columns.Count)
& & & & & & & &{
& & & & & & & & & &datatypes = new NpoiDataType[dt.Columns.Count];
& & & & & & & & & &for (int i = 0; i & dt.Columns.C i++)
& & & & & & & & & &{
& & & & & & & & & & & &string dtcolumntype = dt.Columns[i].DataType.Name.ToLower();
& & & & & & & & & & & &switch (dtcolumntype)
& & & & & & & & & & & &{
& & & & & & & & & & & & & &case &string&: datatypes[i] = NpoiDataType.S
& & & & & & & & & & & & & & & &
& & & & & & & & & & & & & &case &datetime&: datatypes[i] = NpoiDataType.D
& & & & & & & & & & & & & & & &
& & & & & & & & & & & & & &case &boolean&: datatypes[i] = NpoiDataType.B
& & & & & & & & & & & & & & & &
& & & & & & & & & & & & & &case &double&: datatypes[i] = NpoiDataType.N
& & & & & & & & & & & & & & & &
& & & & & & & & & & & & & &default: datatypes[i] = NpoiDataType.S
& & & & & & & & & & & & & & & &
& & & & & & & & & & & &}
& & & & & & & & & &}
& & & & & & & &}
& & & & & & & &#region 创建表头
& & & & & & & &row = sheet.CreateRow(0);//创建第i行
& & & & & & & &ICellStyle style1 = wb.CreateCellStyle();//样式
& & & & & & & &IFont font1 = wb.CreateFont();//字体
& & & & & & & &font1.Color = HSSFColor.WHITE.//字体颜色
& & & & & & & &font1.Boldweight = (short)FontBoldWeight.BOLD;//字体加粗样式
& & & & & & & &//style1.FillBackgroundColor = HSSFColor.WHITE.//GetXLColour(wb, LevelOneColor);// 设置图案色
& & & & & & & &style1.FillForegroundColor = HSSFColor.GREEN.//GetXLColour(wb, LevelOneColor);// 设置背景色
& & & & & & & &style1.FillPattern = FillPatternType.SOLID_FOREGROUND;
& & & & & & & &style1.SetFont(font1);//样式里的字体设置具体的字体样式
& & & & & & & &style1.Alignment = HorizontalAlignment.CENTER;//文字水平对齐方式
& & & & & & & &style1.VerticalAlignment = VerticalAlignment.CENTER;//文字垂直对齐方式
& & & & & & & &row.HeightInPoints = 25;
& & & & & & & &for (j = 0; j & dt.Columns.C j++)
& & & & & & & &{
& & & & & & & & & &columnValue = dt.Columns[j].ColumnN
& & & & & & & & & &curLength = Encoding.Default.GetByteCount(columnValue.ToString());
& & & & & & & & & &maxLength = (maxLength & curLength ? curLength : maxLength);
& & & & & & & & & &int colounwidth = 256 * maxL
& & & & & & & & & &sheet.SetColumnWidth(j, colounwidth);
& & & & & & & & & &try
& & & & & & & & & &{
& & & & & & & & & & & &cell = row.CreateCell(j);//创建第0行的第j列
& & & & & & & & & & & &cell.CellStyle = style1;//单元格式设置样式
& & & & & & & & & & & &try
& & & & & & & & & & & &{
& & & & & & & & & & & & & &cell.SetCellType(CellType.STRING);
& & & & & & & & & & & & & &cell.SetCellValue(columnValue.ToString());
& & & & & & & & & & & &}
& & & & & & & & & & & &catch { }
& & & & & & & & & &}
& & & & & & & & & &catch
& & & & & & & & & &{
& & & & & & & & & & & &
& & & & & & & & & &}
& & & & & & & &}
& & & & & & & &#endregion
& & & & & & & &#region 创建每一行
& & & & & & & &for (int i = startR i & ds.Tables[0].Rows.C i++)
& & & & & & & &{
& & & & & & & & & &dr = ds.Tables[0].Rows[i];
& & & & & & & & & &row = sheet.CreateRow(i + 1);//创建第i行
& & & & & & & & & &for (j = 0; j & dt.Columns.C j++)
& & & & & & & & & &{
& & & & & & & & & & & &columnValue = dr[j];
& & & & & & & & & & & &curLength = Encoding.Default.GetByteCount(columnValue.ToString());
& & & & & & & & & & & &maxLength = (maxLength & curLength ? curLength : maxLength);
& & & & & & & & & & & &int colounwidth = 256 * maxL
& & & & & & & & & & & &sheet.SetColumnWidth(j, colounwidth);
& & & & & & & & & & & &try
& & & & & & & & & & & &{
& & & & & & & & & & & & & &cell = row.CreateCell(j);//创建第i行的第j列
& & & & & & & & & & & & & &#region 插入第j列的数据
& & & & & & & & & & & & & & try
& & & & & & & & & & & & & &{
& & & & & & & & & & & & & & & &NpoiDataType dtype = datatypes[j];
& & & & & & & & & & & & & & & &switch (dtype)
& & & & & & & & & & & & & & & &{
& & & & & & & & & & & & & & & & & &case NpoiDataType.String:
& & & & & & & & & & & & & & & & & & & &{
& & & & & & & & & & & & & & & & & & & & & &cell.SetCellType(CellType.STRING);
& & & & & & & & & & & & & & & & & & & & & &cell.SetCellValue(columnValue.ToString());
& & & & & & & & & & & & & & & & & & & &}
& & & & & & & & & & & & & & & & & &case NpoiDataType.Datetime:
& & & & & & & & & & & & & & & & & & & &{
& & & & & & & & & & & & & & & & & & & & & &cell.SetCellType(CellType.STRING);
& & & & & & & & & & & & & & & & & & & & & &cell.SetCellValue(columnValue.ToString());
& & & & & & & & & & & & & & & & & & & &}
& & & & & & & & & & & & & & & & & &case NpoiDataType.Numeric:
& & & & & & & & & & & & & & & & & & & &{
& & & & & & & & & & & & & & & & & & & & & &cell.SetCellType(CellType.NUMERIC);
& & & & & & & & & & & & & & & & & & & & & &cell.SetCellValue(Convert.ToDouble(columnValue));
& & & & & & & & & & & & & & & & & & & &}
& & & & & & & & & & & & & & & & & &case NpoiDataType.Bool:
& & & & & & & & & & & & & & & & & & & &{
& & & & & & & & & & & & & & & & & & & & & &cell.SetCellType(CellType.BOOLEAN);
& & & & & & & & & & & & & & & & & & & & & &cell.SetCellValue(Convert.ToBoolean(columnValue));
& & & & & & & & & & & & & & & & & & & &}
& & & & & & & & & & & & & & & & & &case NpoiDataType.Richtext:
& & & & & & & & & & & & & & & & & & & &{
& & & & & & & & & & & & & & & & & & & & & &cell.SetCellType(CellType.FORMULA);
& & & & & & & & & & & & & & & & & & & & & &cell.SetCellValue(columnValue.ToString());
& & & & & & & & & & & & & & & & & & & &}
& & & & & & & & & & & & & & & &}
& & & & & & & & & & & & & &}
& & & & & & & & & & & & & &catch
& & & & & & & & & & & & & &{
& & & & & & & & & & & & & & & &cell.SetCellType(CellType.STRING);
& & & & & & & & & & & & & & & &cell.SetCellValue(columnValue.ToString());
& & & & & & & & & & & & & &}
& & & & & & & & & & & & & &#endregion
& & & & & & & & & & & &}
& & & & & & & & & & & &catch
& & & & & & & & & & & &{
& & & & & & & & & & & & & &
& & & & & & & & & & & &}
& & & & & & & & & &}
& & & & & & & &}
& & & & & & & &#endregion
& & & & & & & &//using (FileStream fs = new FileStream(@SaveFileName, FileMode.OpenOrCreate))//生成文件在服务器上
& & & & & & & &//{
& & & & & & & &// & &wb.Write(fs);
& & & & & & & &//}
& & & & & & & &//string SaveFileName = &output.xls&;
& & & & & & & &using (FileStream fs = new FileStream(@SaveFileName, FileMode.OpenOrCreate, FileAccess.Write))//生成文件在服务器上
& & & & & & & &{
& & & & & & & & & &wb.Write(fs);
& & & & & & & & & &Console.WriteLine(&文件保存成功!& + SaveFileName);
& & & & & & & &}
& & & & & & & &
& & & & & &}
& & & & & &catch (Exception er)
& & & & & &{
& & & & & & & &Console.WriteLine(&文件保存成功!& + SaveFileName);
& & & & & & & &
& & & & & &}
& & & &#endregion
& & & &#region 从DataSet导出到MemoryStream流2007
& & & &/// &summary&
& & & &/// 从DataSet导出到MemoryStream流2007
& & & &/// &/summary&
& & & &/// &param name=&SaveFileName&&文件保存路径&/param&
& & & &/// &param name=&SheetName&&Excel文件中的Sheet名称&/param&
& & & &/// &param name=&ds&&存储数据的DataSet&/param&
& & & &/// &param name=&startRow&&从哪一行开始写入,从0开始&/param&
& & & &/// &param name=&datatypes&&DataSet中的各列对应的数据类型&/param&
& & & &public bool CreateExcel2007(string SaveFileName,string SheetName, DataSet ds, int startRow, params NpoiDataType[] datatypes)
& & & & & &try
& & & & & &{
& & & & & & & &if (startRow & 0) startRow = 0;
& & & & & & & &XSSFWorkbook wb = new XSSFWorkbook();
& & & & & & & &ISheet sheet = wb.CreateSheet(SheetName);
& & & & & & & &//sheet.SetColumnWidth(0, 50 * 256);
& & & & & & & &//sheet.SetColumnWidth(1, 100 * 256);
& & & & & & & &IR
& & & & & & & &IC
& & & & & & & &DataR
& & & & & & & &
& & & & & & & &int maxLength = 0;
& & & & & & & &int curLength = 0;
& & & & & & & &object columnV
& & & & & & & &DataTable dt = ds.Tables[0];
& & & & & & & &if (datatypes.Length & dt.Columns.Count)
& & & & & & & &{
& & & & & & & & & &datatypes = new NpoiDataType[dt.Columns.Count];
& & & & & & & & & &for (int i = 0; i & dt.Columns.C i++)
& & & & & & & & & &{
& & & & & & & & & & & &string dtcolumntype = dt.Columns[i].DataType.Name.ToLower();
& & & & & & & & & & & &switch (dtcolumntype)
& & & & & & & & & & & &{
& & & & & & & & & & & & & &case &string&: datatypes[i] = NpoiDataType.S
& & & & & & & & & & & & & & & &
& & & & & & & & & & & & & &case &datetime&: datatypes[i] = NpoiDataType.D
& & & & & & & & & & & & & & & &
& & & & & & & & & & & & & &case &boolean&: datatypes[i] = NpoiDataType.B
& & & & & & & & & & & & & & & &
& & & & & & & & & & & & & &case &double&: datatypes[i] = NpoiDataType.N
& & & & & & & & & & & & & & & &
& & & & & & & & & & & & & &default: datatypes[i] = NpoiDataType.S
& & & & & & & & & & & & & & & &
& & & & & & & & & & & &}
& & & & & & & & & &}
& & & & & & & &}
& & & & & & & &#region 创建表头
& & & & & & & &row = sheet.CreateRow(0);//创建第i行
& & & & & & & &ICellStyle style1 = wb.CreateCellStyle();//样式
& & & & & & & &IFont font1 = wb.CreateFont();//字体
& & & & & & & &font1.Color = HSSFColor.WHITE.//字体颜色
& & & & & & & &font1.Boldweight = (short)FontBoldWeight.BOLD;//字体加粗样式
& & & & & & & &//style1.FillBackgroundColor = HSSFColor.WHITE.//GetXLColour(wb, LevelOneColor);// 设置图案色
& & & & & & & &style1.FillForegroundColor = HSSFColor.GREEN.//GetXLColour(wb, LevelOneColor);// 设置背景色
& & & & & & & &style1.FillPattern = FillPatternType.SOLID_FOREGROUND;
& & & & & & & &style1.SetFont(font1);//样式里的字体设置具体的字体样式
& & & & & & & &style1.Alignment = HorizontalAlignment.CENTER;//文字水平对齐方式
& & & & & & & &style1.VerticalAlignment = VerticalAlignment.CENTER;//文字垂直对齐方式
& & & & & & & &row.HeightInPoints = 25;
& & & & & & & &for (j = 0; j & dt.Columns.C j++)
& & & & & & & &{
& & & & & & & & & &columnValue = dt.Columns[j].ColumnN
& & & & & & & & & &curLength = Encoding.Default.GetByteCount(columnValue.ToString());
& & & & & & & & & &maxLength = (maxLength & curLength ? curLength : maxLength);
& & & & & & & & & &int colounwidth = 256 * maxL
& & & & & & & & & &sheet.SetColumnWidth(j, colounwidth);
& & & & & & & & & &try
& & & & & & & & & &{
& & & & & & & & & & & &cell = row.CreateCell(j);//创建第0行的第j列
& & & & & & & & & & & &cell.CellStyle = style1;//单元格式设置样式
& & & & & & & & & & & &try
& & & & & & & & & & & &{
& & & & & & & & & & & & & &//cell.SetCellType(CellType.STRING);
& & & & & & & & & & & & & &cell.SetCellValue(columnValue.ToString());
& & & & & & & & & & & &}
& & & & & & & & & & & &catch { }
& & & & & & & & & &}
& & & & & & & & & &catch
& & & & & & & & & &{
& & & & & & & & & & & &
& & & & & & & & & &}
& & & & & & & &}
& & & & & & & &#endregion
& & & & & & & &#region 创建每一行
& & & & & & & &for (int i = startR i & ds.Tables[0].Rows.C i++)
& & & & & & & &{
& & & & & & & & & &dr = ds.Tables[0].Rows[i];
& & & & & & & & & &row = sheet.CreateRow(i + 1);//创建第i行
& & & & & & & & & &for (j = 0; j & dt.Columns.C j++)
& & & & & & & & & &{
& & & & & & & & & & & &columnValue = dr[j];
& & & & & & & & & & & &curLength = Encoding.Default.GetByteCount(columnValue.ToString());
& & & & & & & & & & & &maxLength = (maxLength & curLength ? curLength : maxLength);
& & & & & & & & & & & &int colounwidth = 256 * maxL
& & & & & & & & & & & &sheet.SetColumnWidth(j, colounwidth);
& & & & & & & & & & & &try
& & & & & & & & & & & &{
& & & & & & & & & & & & & &cell = row.CreateCell(j);//创建第i行的第j列
& & & & & & & & & & & & & &#region 插入第j列的数据
& & & & & & & & & & & & & &try
& & & & & & & & & & & & & &{
& & & & & & & & & & & & & & & &NpoiDataType dtype = datatypes[j];
& & & & & & & & & & & & & & & &switch (dtype)
& & & & & & & & & & & & & & & &{
& & & & & & & & & & & & & & & & & &case NpoiDataType.String:
& & & & & & & & & & & & & & & & & & & &{
& & & & & & & & & & & & & & & & & & & & & &//cell.SetCellType(CellType.STRING);
& & & & & & & & & & & & & & & & & & & & & &cell.SetCellValue(columnValue.ToString());
& & & & & & & & & & & & & & & & & & & &}
& & & & & & & & & & & & & & & & & &case NpoiDataType.Datetime:
& & & & & & & & & & & & & & & & & & & &{
& & & & & & & & & & & & & & & & & & & & & // cell.SetCellType(CellType.STRING);
& & & & & & & & & & & & & & & & & & & & & &cell.SetCellValue(columnValue.ToString());
& & & & & & & & & & & & & & & & & & & &}
& & & & & & & & & & & & & & & & & &case NpoiDataType.Numeric:
& & & & & & & & & & & & & & & & & & & &{
& & & & & & & & & & & & & & & & & & & & & &//cell.SetCellType(CellType.NUMERIC);
& & & & & & & & & & & & & & & & & & & & & &cell.SetCellValue(Convert.ToDouble(columnValue));
& & & & & & & & & & & & & & & & & & & &}
& & & & & & & & & & & & & & & & & &case NpoiDataType.Bool:
& & & & & & & & & & & & & & & & & & & &{
& & & & & & & & & & & & & & & & & & & & & &//cell.SetCellType(CellType.BOOLEAN);
& & & & & & & & & & & & & & & & & & & & & &cell.SetCellValue(Convert.ToBoolean(columnValue));
& & & & & & & & & & & & & & & & & & & &}
& & & & & & & & & & & & & & & & & &case NpoiDataType.Richtext:
& & & & & & & & & & & & & & & & & & & &{
& & & & & & & & & & & & & & & & & & & & & // cell.SetCellType(CellType.FORMULA);
& & & & & & & & & & & & & & & & & & & & & &cell.SetCellValue(columnValue.ToString());
& & & & & & & & & & & & & & & & & & & &}
& & & & & & & & & & & & & & & &}
& & & & & & & & & & & & & &}
& & & & & & & & & & & & & &catch
& & & & & & & & & & & & & &{
& & & & & & & & & & & & & & & &//cell.SetCellType(HSSFCell.CELL_TYPE_STRING);
& & & & & & & & & & & & & & & &cell.SetCellValue(columnValue.ToString());
& & & & & & & & & & & & & &}
& & & & & & & & & & & & & &#endregion
& & & & & & & & & & & &}
& & & & & & & & & & & &catch
& & & & & & & & & & & &{
& & & & & & & & & & & & & &
& & & & & & & & & & & &}
& & & & & & & & & &}
& & & & & & & &}
& & & & & & & &#endregion
& & & & & & & &//using (FileStream fs = new FileStream(@SaveFileName, FileMode.OpenOrCreate))//生成文件在服务器上
& & & & & & & &//{
& & & & & & & &// & &wb.Write(fs);
& & & & & & & &//}
& & & & & & & &//string SaveFileName = &output.xlsx&;
& & & & & & & &using (FileStream fs = new FileStream(SaveFileName, FileMode.OpenOrCreate, FileAccess.Write))//生成文件在服务器上
& & & & & & & &{
& & & & & & & & & &wb.Write(fs);
& & & & & & & & & &Console.WriteLine(&文件保存成功!& + SaveFileName);
& & & & & & & &}
& & & & & & & &
& & & & & &}
& & & & & &catch (Exception er)
& & & & & &{
& & & & & & & &Console.WriteLine(&文件保存失败!& + SaveFileName);
& & & & & & & &
& & & & & &}
& & & &#endregion
& & & &private short GetXLColour(HSSFWorkbook workbook, System.Drawing.Color SystemColour)
& & & & & &short s = 0;
& & & & & &HSSFPalette XlPalette = workbook.GetCustomPalette();
& & & & & &HSSFColor XlColour = XlPalette.FindColor(SystemColour.R, SystemColour.G, SystemColour.B);
& & & & & &if (XlColour == null)
& & & & & &{
& & & & & & & &if (NPOI.HSSF.Record.PaletteRecord.STANDARD_PALETTE_SIZE & 255)
& & & & & & & &{
& & & & & & & & & &if (NPOI.HSSF.Record.PaletteRecord.STANDARD_PALETTE_SIZE & 64)
& & & & & & & & & &{
& & & & & & & & & & & &//NPOI.HSSF.Record.PaletteRecord.STANDARD_PALETTE_SIZE= 64;
& & & & & & & & & & & &//NPOI.HSSF.Record.PaletteRecord.STANDARD_PALETTE_SIZE += 1;
& & & & & & & & & & & &XlColour = XlPalette.AddColor(SystemColour.R, SystemColour.G, SystemColour.B);
& & & & & & & & & &}
& & & & & & & & & &else
& & & & & & & & & &{
& & & & & & & & & & & &XlColour = XlPalette.FindSimilarColor(SystemColour.R, SystemColour.G, SystemColour.B);
& & & & & & & & & &}
& & & & & & & & & &s = XlColour.GetIndex();
& & & & & & & &}
& & & & & &}
& & & & & &else
& & & & & & & &s = XlColour.GetIndex();
& & & & & &
& & & &#region 读Excel-根据NpoiDataType创建的DataTable列的数据类型
& & & &/// &summary&
& & & &/// 读Excel-根据NpoiDataType创建的DataTable列的数据类型
& & & &/// &/summary&
& & & &/// &param name=&datatype&&&/param&
& & & &/// &returns&&/returns&
& & & &private Type GetDataTableType(NpoiDataType datatype)
& & & & & &Type tp = typeof(string);//Type.GetType(&System.String&)
& & & & & &switch (datatype)
& & & & & &{
& & & & & & & &case NpoiDataType.Bool:
& & & & & & & & & &tp = typeof(bool);
& & & & & & & & & &
& & & & & & & &case NpoiDataType.Datetime:
& & & & & & & & & &tp = typeof(DateTime);
& & & & & & & & & &
& & & & & & & &case NpoiDataType.Numeric:
& & & & & & & & & &tp = typeof(double);
& & & & & & & & & &
& & & & & & & &case NpoiDataType.Error:
& & & & & & & & & &tp = typeof(string);
& & & & & & & & & &
& & & & & & & &case NpoiDataType.Blank:
& & & & & & & & & &tp = typeof(string);
& & & & & & & & & &
& & & & & &}
& & & & & &
& & & &#endregion
& & & &#region 读Excel-得到不同数据类型单元格的数据
& & & &/// &summary&
& & & &/// 读Excel-得到不同数据类型单元格的数据
& & & &/// &/summary&
& & & &/// &param name=&datatype&&数据类型&/param&
& & & &/// &param name=&row&&数据中的一行&/param&
& & & &/// &param name=&column&&哪列&/param&
& & & &/// &returns&&/returns&
& & & &private object GetCellData(NpoiDataType datatype, IRow row, int column)
& & & & & &switch (datatype)
& & & & & &{
& & & & & & & &case NpoiDataType.String:
& & & & & & & & & &try
& & & & & & & & & &{
& & & & & & & & & & & &return row.GetCell(column).DateCellV
& & & & & & & & & &}
& & & & & & & & & &catch
& & & & & & & & & &{
& & & & & & & & & & & &try
& & & & & & & & & & & &{
& & & & & & & & & & & & & &return row.GetCell(column).StringCellV
& & & & & & & & & & & &}
& & & & & & & & & & & &catch
& & & & & & & & & & & &{
& & & & & & & & & & & & & &return row.GetCell(column).NumericCellV
& & & & & & & & & & & &}
& & & & & & & & & &}
& & & & & & & &case NpoiDataType.Bool:
& & & & & & & & & &try { return row.GetCell(column).BooleanCellV }
& & & & & & & & & &catch { return row.GetCell(column).StringCellV }
& & & & & & & &case NpoiDataType.Datetime:
& & & & & & & & & &try { return row.GetCell(column).DateCellV }
& & & & & & & & & &catch { return row.GetCell(column).StringCellV }
& & & & & & & &case NpoiDataType.Numeric:
& & & & & & & & & &try { return row.GetCell(column).NumericCellV }
& & & & & & & & & &catch { return row.GetCell(column).StringCellV }
& & & & & & & &case NpoiDataType.Richtext:
& & & & & & & & & &try { return row.GetCell(column).RichStringCellV }
& & & & & & & & & &catch { return row.GetCell(column).StringCellV }
& & & & & & & &case NpoiDataType.Error:
& & & & & & & & & &try { return row.GetCell(column).ErrorCellV }
& & & & & & & & & &catch { return row.GetCell(column).StringCellV }
& & & & & & & &case NpoiDataType.Blank:
& & & & & & & & & &try { return row.GetCell(column).StringCellV }
& & & & & & & & & &catch { return &&; }
& & & & & & & &default: return &&;
& & & & & &}
& & & &#endregion
& & & &#region 获取单元格数据类型
& & & &/// &summary&
& & & &/// 获取单元格数据类型
& & & &/// &/summary&
& & & &/// &param name=&hs&&&/param&
& & & &/// &returns&&/returns&
& & & &private NpoiDataType GetCellDataType(ICell hs)
& & & & & &NpoiDataT
& & & & & &DateTime t1;
& & & & & &string cellvalue = &&;
& & & & & &switch (hs.CellType)
& & & & & &{
& & & & & & & &case CellType.BLANK:
& & & & & & & & & &dtype = NpoiDataType.S
& & & & & & & & & &cellvalue = hs.StringCellV
& & & & & & & & & &
& & & & & & & &case CellType.BOOLEAN:
& & & & & & & & & &dtype = NpoiDataType.B
& & & & & & & & & &
& & & & & & & &case CellType.NUMERIC:
& & & & & & & & & &dtype = NpoiDataType.N
& & & & & & & & & &cellvalue = hs.NumericCellValue.ToString();
& & & & & & & & & &
& & & & & & & &case CellType.STRING:
& & & & & & & & & &dtype = NpoiDataType.S
& & & & & & & & & &cellvalue = hs.StringCellV
& & & & & & & & & &
& & & & & & & &case CellType.ERROR:
& & & & & & & & & &dtype = NpoiDataType.E
& & & & & & & & & &
& & & & & & & &case CellType.FORMULA:
& & & & & & & &default:
& & & & & & & & & &dtype = NpoiDataType.D
& & & & & & & & & &
& & & & & &}
& & & & & &if (cellvalue != && && DateTime.TryParse(cellvalue, out t1)) dtype = NpoiDataType.D
& & & & & &
& & & &#endregion
& & & &#region 测试代码
& & & &#endregion
& &#region 枚举(Excel单元格数据类型)
& &/// &summary&
& &/// 枚举(Excel单元格数据类型)
& &/// &/summary&
& &public enum NpoiDataType
& & & &/// &summary&
& & & &/// 字符串类型-值为1
& & & &/// &/summary&
& & & &String,
& & & &/// &summary&
& & & &/// 布尔类型-值为2
& & & &/// &/summary&
& & & &Bool,
& & & &/// &summary&
& & & &/// 时间类型-值为3
& & & &/// &/summary&
& & & &Datetime,
& & & &/// &summary&
& & & &/// 数字类型-值为4
& & & &/// &/summary&
& & & &Numeric,
& & & &/// &summary&
& & & &/// 复杂文本类型-值为5
& & & &/// &/summary&
& & & &Richtext,
& & & &/// &summary&
& & & &/// 空白
& & & &/// &/summary&
& & & &Blank,
& & & &/// &summary&
& & & &/// 错误
& & & &/// &/summary&
& & & &Error
& &#endregion
* 以上用户言论只代表其个人观点,不代表CSDN网站的观点或立场
访问:276396次
积分:5098
积分:5098
排名:第2301名
原创:231篇
转载:18篇
译文:11篇
评论:100条
pukuimin1226
(1)(5)(1)(1)(3)(18)(5)(7)(11)(5)(3)(10)(2)(2)(4)(8)(14)(1)(3)(1)(13)(5)(3)(30)(11)(28)(20)(38)(1)(3)(1)(2)

我要回帖

更多关于 npoi 导出excel 的文章

 

随机推荐