C#解析Excel表

来源:互联网 发布:oracle数据库授权 编辑:程序博客网 时间:2024/06/03 19:23

C#解析Excel表大家都写了很多方法,我这里稍微提一下:

1.OleDb

2.NPOI

3.微软的Microsoft.Office.Interop.Excel.dll

这三种方法中个人觉得OleDb最好用。但是这里讨论的是另外的情况,我要解析的Excel表是.xls格式的但是其实它是Html文件,并不是一个真正的.xls。所以在使用1.2两种解析方法的时候会遇到:外部表不是预期的格式这种错误,经过测试,将Excel的内容复制到一张新的excel表中然后另存为.xls或者.xlsx文件后就可以读出来了。但是这会加一步手工,和我们的期待不符合。这时候我们就需要使用第三种方式来解析了。

---正在研究,稍后补充--2017-3-31

清明之前研究出来了,不过着急出去浪。没有补充完毕,这次我会把Microsoft解析.xls格式的html文件的心得贴出来。希望我趟过得坑不会再坑到大家。

1.Microsoft.Office.Interop.Excel.dll这个文件,如果你装了Office可以直接在C盘下搜索。然后找到Office目录下的Microsoft.Office.Interop.Excel.dll文件。把它粘贴复制到你的项目工程底下。为稍后引用做准备。

2.在解决方案管理器下右击Reference-->Add Reference-->Brower



然后单击Add,之后单击OK即可。此时你就会发现解决方案管理器中的Reference中引用了Microsoft.Office.Interop.Excel。此时你就可以引用这个库了。

3.之后就是使用这个类库来解析我们的Excel文件啦。

//下边主要说明一下这里的Range,Range指的是需要获得的数据域。他的数据域是从左上角到右下角指定的一个范围。

下图解:如果我要取得下图中的这个范围的数据我需要拿到左上角和右下角的位置。即A1-E7

所以Range range = workSheet.Cells.get_Range("A1", "E7");此时range就会存放红色线框之内的数据。


下边是部分代码片:

object missing = System.Reflection.Missing.Value;Microsoft.Office.Interop.Excel.Application excel = new Microsoft.Office.Interop.Excel.Application();// 以只读的形式打开EXCEL文件                Workbook wb = excel.Application.Workbooks.Open(strFileName, missing, true, missing, missing, missing,  missing, missing, missing, true, missing, missing, missing, missing, missing);                //取得第一个工作薄                Worksheet ws = (Worksheet)wb.Worksheets.get_Item(1);//取得总记录行数   (包括标题列)                int rowsint = ws.UsedRange.Cells.Rows.Count - 1; //得到行数                int columnsint = ws.UsedRange.Cells.Columns.Count;//得到列数int asciiCode = 64 + columnsint;                char maxLetter = (char)asciiCode;                Range rng2 = ws.Cells.get_Range("A4", maxLetter.ToString() + rowsint);object[,] arryCus = (object[,])rng2.Value2;//这里rng2.Value是数据的类型,rng2.Value2是数据本身。

之后你就拿到了一个object类型的二维数组,接下来使用它吧。


0 0
原创粉丝点击