c#读excel 不用office组件
某日笔者写了个导入导出excel的小程序,拿给别人用时,别人说程序有问题读不了。
究其原因发现原来是using Microsoft.Office.Interop.Excel;引用出错。发现他装的office是精简版。
在网上查资料时发现了一遍文章 4种开源Excel读写类库与MS Excel类库写操作对比 里面分析了4中开源的读写excel的类库。分析了这篇文章的数据后。选择了NPOI。
什么是NPOI?
曰:是POI的.NET版本。那POI又是什么呢?POI是一套用Java写成的库,能够帮助开发者在没有安装微软Office的情况下读写Office 97-2003的文件,支持的文件格式包括xls, doc, ppt等。
下载下来后,发现有很多demo,又懒得看,找到dll类库,又在网上找了片言只语。发现有的代码可以,有的代码不可以。究其原因是npoi处理excel时分xls和xlsx之分。所以闲着没事,自己就封装了一个读excel的类
代码如下
using System;
using System.Collections.Generic;
using System.Linq;
using System.Text;
using System.IO;
using System.Data;
using NPOI.HSSF.UserModel;
using NPOI.SS.UserModel;
using NPOI.XSSF.UserModel;
using System.Collections; namespace WindowsFormsApplication1
{
/// <summary>
/// Excel的辅助类
/// </summary>
public class ExcelHelper
{
/// <summary>
/// 读取excel到datatable中
/// </summary>
/// <param name="excelPath">excel地址</param>
/// <param name="sheetIndex">sheet索引</param>
/// <returns>成功返回datatable,失败返回null</returns>
public static DataTable ImportExcel(string excelPath, int sheetIndex)
{ IWorkbook workbook = null;//全局workbook
ISheet sheet;//sheet
DataTable table = null;
try
{
FileInfo fileInfo = new FileInfo(excelPath);//判断文件是否存在
if (fileInfo.Exists)
{
FileStream fileStream = fileInfo.OpenRead();//打开文件,得到文件流
switch (fileInfo.Extension)
{
//xls是03,用HSSFWorkbook打开,.xlsx是07或者10用XSSFWorkbook打开
case ".xls": workbook = new HSSFWorkbook(fileStream); break;
case ".xlsx": workbook = new XSSFWorkbook(fileStream); break;
default: break;
}
fileStream.Close();//关闭文件流
}
if (workbook != null)
{
sheet = workbook.GetSheetAt(sheetIndex);//读取到指定的sheet
table = new DataTable();//初始化一个table IRow headerRow = sheet.GetRow();//获取第一行,一般为表头
int cellCount = headerRow.LastCellNum;//得到列数 for (int i = headerRow.FirstCellNum; i < cellCount; i++)
{
DataColumn column = new DataColumn(headerRow.GetCell(i).StringCellValue);//初始化table的列
table.Columns.Add(column);
}
//遍历读取cell
for (int i = (sheet.FirstRowNum + ); i <= sheet.LastRowNum; i++)
{
NPOI.SS.UserModel.IRow row = sheet.GetRow(i);//得到一行
DataRow dataRow = table.NewRow();//新建一个行 for (int j = row.FirstCellNum; j < cellCount; j++)
{
ICell cell = row.GetCell(j);//得到cell
if (cell == null)//如果cell为null,则赋值为空
{
dataRow[j] = "";
}
else
{
dataRow[j] = row.GetCell(j).ToString();//否则赋值
}
} table.Rows.Add(dataRow);//把行 加入到table中 }
}
return table; }
catch (Exception e)
{
return table;
}
finally
{
//释放资源
if (table != null) { table.Dispose(); }
workbook = null;
sheet = null;
}
} }
}
关于写excel 请参考笔者的上一篇文章 http://www.cnblogs.com/Bonker/p/3246369.html
c#读excel 不用office组件的更多相关文章
- 在DCOM 中不存在WORD、EXCEL等OFFICE组件
DCOM里面没有与office相关的所有组件解决方法:先简单说下,操作步骤(项目演示完成后,补上图): Run MMC -32 File Add Remove Snap-in Component Se ...
- Asp.net导出Excel续章(自定义合并单元格,非Office组件)
结合上次写的导出Excel方法,这次上头要求我将列头进行一下合并 以前的效果: 改进后的效果: 在上篇文章中写到了Excel的导出方法,这次为了避免在生产环境中使用Office组件,服务器各种权限配置 ...
- 高效而稳定的企业级.NET Office 组件Spire(.NET组件介绍之二)
在项目开发中,尤其是企业的业务系统中,对文档的操作是非常多的,有时几乎给人一种错觉的是”这个系统似乎就是专门操作文档的“.毕竟现在的很多办公中大都是在PC端操作文档等软件,在这些庞大而繁重的业务中,单 ...
- NET Office 组件Spire
高效而稳定的企业级.NET Office 组件Spire 在项目开发中,尤其是企业的业务系统中,对文档的操作是非常多的,有时几乎给人一种错觉的是"这个系统似乎就是专门操作文档的" ...
- Spire.Office组件使用例子
用.NET开发程序通常要涉及到对Office文件读写操作,比较常见的操作比如提取文本,导出Excel格式数据,动态生成word文档,生成pdf文档等. 实现这些功能通常需要在服务端安装office软件 ...
- windows 2008 下C#调用office组件访问拒绝的解决方法(failed due to the following error: 80070005 拒绝访问)
"组件服务"- >"计算机"- >"我的电脑"- >"DCOM配置"->找到word->属 ...
- .NET通过调用Office组件导出Word文档
.NET通过调用Office组件导出Word文档 最近做项目需要实现一个客户端下载word表格的功能,该功能是用户点击"下载表格",服务端将该用户的数据查询出来并生成数据到Word ...
- Asp.Net调用Office组件操作时的DCOM配置 (转)
Asp.Net调用Office组件操作时的DCOM配置 http://blog.csdn.net/gz775/article/details/6447758 在项目中将数据导出为Excel格式时出现“ ...
- 维护网站时碰到的Office组件导入、导出出现的问题
问题一:检索COM 类工厂中CLSID 为 {00024500-0000-0000-C000-000000000046}的组件时失败,原因是出现以下错误: 80070005 解决方法: 1.运行dco ...
随机推荐
- 如何开启firebug显示注释?
如何开启firebug注释显示?
- js forEach for区别
1.循环中断差别 具体见示例代码: <!DOCTYPE html> <html lang="zh"> <head> <meta chars ...
- JavaScript toString、String和stringify方法区别
<!DOCTYPE html> <html> <head> <meta charset="utf-8" /> <title&g ...
- table布局 防止table变形 td固定宽度
防止table变形 td固定宽度 具体设置如下代码: <!doctype html> <html lang="en"> <head> <m ...
- zookeeper工作原理解析
zookeeper一般用于distributed locking,并不适合用于distributed storage,由于zookeeper的每一个node.也叫做znode的存储容量限制是1M. z ...
- Autocomplete in ASP.NET MVC3自动检索并填充输入框
1.单一产品情况下使用: public ActionResult GetStockList() { var item = _db.Stocks.ToList().Select(s =>s.Pro ...
- url请求返回结果测试工具(CURL)
官网:http://curl.haxx.se/download.html 具体用法用时百度 或 到时再补充
- div最小高度的2种写法
1.第一种写法: 原理:在IE6中,使用CSS定义div的高度的时候经常遇到这个问题,就是当div的最小高度小于一定的值以后,就会发现,无论你怎么设置最小高度,div的高度会固定在一个值不再发生变动, ...
- SSO之安装CAS Server
JA-SIG CAS(Central Authentication Service)为Web应用系统提供了单点登录服务.它的特性包括:一个开放和具有很好文档支持的协议:一个Java开源服务器组件:提供 ...
- MySQL Workbench--Window安装试用
MySQL Workbench 01.概述 MySQL Workbench provides DBAs and developers an integrated tools environment f ...