WinForm开发(10)——文件流操作(1)——Excel基础和C#程序处理Excel的技术

一、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。(如何知道数据有多少行?最后一行的编号。)

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值