一、Excel基础
1、整个Excel表格叫工作表:Workbook;工作表包含的叫页:Sheet;行:Row;单元格:Cell。
2、Excel中的电话号码问题,看起来像数字的字符串以半角单引号开头就没问题了。
3、使用区域(UsedRange):用Excel表的时候不一定是从最左上角的单元格开始用,为了减小文件尺寸,有使用区域的概念,Excel只存储使用区域。
二、C#程序处理Excel的技术
1、OLE Automation:程序启动一个Excel进程,然后和Excel进程进行通讯来进行Excel的操作。优点:强大,能够使用Excel的所有功能,要求装Excel,微软最推荐这种用法,因为可以促进Excel的销量。会启动Excel进程,不适合于服务器(比如Asp.Net网站,安全性、效率)。
2、引用Excel.Interop:
object missing = System.Reflection.Missing.Value;
ApplicationClass app = new ApplicationClass();
app.SheetsInNewWorkbook = 1;
app.Visible = true;
Workbook wb = app.Workbooks.Add(XlWBATemplate.xlWBATWorksheet);
Worksheet sheet = (Worksheet)wb.Sheets[1];
sheet.get_Range("A1", "A1").Value2 = "hello";
wb.SaveAs("c:/1.xls", XlFileFormat.xlExcel9795, missing, missing, missing, missing, XlSaveAsAccessMode.xlNoChange, missing, missing, missing, missing, missing);
app.Quit();
3、把Excel当成数据库,使用Microsoft.Jet.OleDb访问访问Excel ,参考资料 http://tieba.baidu.com/f?kz=331569890 只适合于完全二维结构,功能最弱,很少用。不用装Excel。
4、OpenXML,微软提供的读写Excel的技术,优点和NPOI差不多,不过只能处理xlsx、docx、pptx格式的文件。值得研究。
5、NPOI、MyXls等,NPOI能够分析Excel文件的格式,能够进行常用Excel操作,不依赖于Excel,节省资源(不用启动Excel进程),没有安全性、性能的问题,在ASP.net中用最合适。只能处理xls格式文件、不能处理xlsx这样的新版本Excel文件格式。处理xlsx还要用OpenXML。
三、NPOI组件的引入
我们平时调用的类是已经添加到引用的,如果想调用系统内置的没有添加引用的其他dll(*严格的说是在GAC中的Assembly)就要添加引用,在【.Net】选项卡中选择,对于另外一些第三方dll(*严格说是Assembly)则需要点击【浏览】选项卡选择对应的dll文件。
将NPOI包解压到硬盘中,然后在项目中添加引用,浏览,将解压目录下的dll全部添加进来。
POI是Apache的一个Java开源项目,NPOI是POI在.net下的移植版本,很多.Net的移植版本开源项目都是在原来的Java版本名称前加上N,比如NHibernate、NDoc、NUnit、NAnt。
四、NPOI起步
1、读取
using (FileStream stream = new FileStream(@"c:\客户资料.xls",FileMode.Open,FileAccess.Read))
{
HSSFWorkbook workbook = new HSSFWorkbook(stream);
MessageBox.Show(workbook.GetSheetName(0));
}
2、遇到错误别慌,仔细看错误信息。可能遇到的问题:文件被其他进程占用。
3、NPOI处理WPS生成的XLS有问题。
五、读取Excel
1、读取字符串类型数据MessageBox.Show(sheet.GetRow(3).GetCell(4).StringCellValue);
2、读取数字类型数据NumericCellValue。
3、判断单元格数据类型:读取GetCell(4).CellType,与HSSFCell类中定义的常量比较即可。
4、判断使用区域:结束行号:LastRowNum。(如何知道数据有多少行?最后一行的编号。)