C# 读excel 方法

最近开发一个项目中,用到了一些读excel 的方法,现在做一些记录,

1,通过oleDb进行操作: 这是一次性的将excel 中的内容导入到dataset中的

            string strConn;
            strConn = "Provider=Microsoft.Jet.OLEDB.4.0;Data Source=" +filenewpath  ";Extended Properties=Excel 8.0;";
            OleDbConnection conn = new OleDbConnection(strConn);
            OleDbDataAdapter oada = new OleDbDataAdapter("select * from [ sheetname $] ", strConn);
            DataSet ds = new DataSet();
            oada.Fill(ds);


2,直接通过workbook进行操作,出自(http://www.cnblogs.com/farrell/archive/2008/01/24/1051273.html)

    2.1 导入microsoft office/office\excel.exe,不同的版本可能名称会不一样,

   2.2 在代码中引入using Microsoft.office.interop.excel 


2.3:如果是对一个已经存在的excel文件进行操作则:
Application app=new Application();
Workbook wbook=app.Workbooks.Open("c:\\temp.xls",Type.Missing,Type.missing,Type.missing,Type.missing,Type.missing,Type.missing,Type.missing,Type.missing,Type.missing,Type.missing,Type.missing,Type.missing,Type.missing,Type.missing);


Worksheet worksheet=(Worksheet)wbook.Worksheets[1];


2.4:如果是新建一个excel文件:
Application app=new Application();
Workbook wbook=app.Workbook.Add(Type.missing);
Worksheet worksheet=(Worksheet)wbook.Worksheets[1];


2.5:设置某个单元格里的内容:
worksheet.Cells[1,2]="列内容"


2.6读取某个单元格里的内容
string temp=((Range)worksheet.Cells[1,2]).Text;


2.7设置某个单元格里的格式
Excel.Range rtemp=worksheet.get_Range("A1","A1");
rtemp.Font.Name="宋体";
rtemp.Font.FontStyle="加粗";
rtemp.Font.Size=5;


2.8 保存新建的内容:
worksheet.SaveAs("c:\\temp.xls",Type.missing,Type.missing,Type.missing,Type.missing,Type.missing,Type.missing,Type.missing,Type.missing);


3,是通过引用第三方的类库

本人是通过作用NPOI来进行操作的,性能还可以,操作也简单,对excel的操作也是比较方便,


首先在工程中添加以下的文件引用

Ionic.Zip和NPOI这两个文件可以在NPOI官网下载,

然后就是添加以下的头文件

using System.IO

using NPOI.HSSF.UserModel;
using NPOI.HPSF;
using NPOI.POIFS.FileSystem;
using NPOI.SS.UserModel;
using NPOI.HSSF.Util;


NPOI.Util   基础辅助库 
NPOI.POIFS   OLE2格式读写库 
NPOI.DDF   Microsoft Drawing格式读写库 
NPOI.SS   Excel公式计算库 
NPOI.HPSF   OLE2的Summary Information和Document Summary Information属性读写库 
NPOI.HSSF   Excel BIFF格式读写库

打开excel文件,

HSSFWorkbook workBook = new HSSFWorkbook(new FileStream(strpath, FileMode.Open));

读取一个sheet

HSSFSheet workSheet = (HSSFSheet)workBook.GetSheetAt(sheetNo);

或者

System.Collections.IEnumerator rows = sheet.GetRowEnumerator();

读取行row

HSSFRow headRow = (HSSFRow)workSheet.GetRow(0);

读取一个单元格

string ClientName = sheetRow.GetCell(3).ToString().Trim();

读取内容可以根据类型进行转化(这是读别人的,拿过来用大笑))

由于Excel的单元格有好几种类型,类型不同显示的东西就不同,具体的类型有 布尔型、数值型、文本型、公式型、空白、错误。

public enum HSSFCellType
{
    Unknown = -1,
    NUMERIC = 0,
    STRING = 1,
    FORMULA = 2,
    BLANK = 3,
    BOOLEAN = 4,
    ERROR = 5
}

switch(cell.CellType)
{
    case HSSFCellType.BLANK:
        dr[i] = "[null]";
        break;
    case HSSFCellType.BOOLEAN:
        dr[i] = cell.BooleanCellValue;
        break;
    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.
        break;
    case HSSFCellType.STRING:
        dr[i] = cell.StringCellValue;
        break;
    case HSSFCellType.ERROR:
        dr[i] = cell.ErrorCellValue;
        break;
    case HSSFCellType.FORMULA:
    default:
        dr[i] = "="+cell.CellFormula;
        break;
}

以下是一个例子
HSSFSheet sheet = hssfworkbook.GetSheetAt(0);
System.Collections.IEnumerator rows = sheet.GetRowEnumerator();
DataTable dtSearchedIDs= newDataTable();


dtCol = new DataColumn("Row", System.Type.GetType("System.String"));
dtSearchedIDs.Columns.Add(dtCol);

dtCol = new DataColumn("Col", System.Type.GetType("System.String"));
dtSearchedIDs.Columns.Add(dtCol);
dtCol = new DataColumn("ID1", System.Type.GetType("System.String"));
dtSearchedIDs.Columns.Add(dtCol);
dtCol = new DataColumn("ID2", System.Type.GetType("System.String"));
dtSearchedIDs.Columns.Add(dtCol);
dtCol = new DataColumn("IsIDInExcel", System.Type.GetType("System.Boolean"));
dtSearchedIDs.Columns.Add(dtCol);

while(rows.MoveNext())
{
    HSSFRow row = (HSSFRow)rows.Current;
    DataRow dr = dt.NewRow();
    for(inti = 0; i < row.LastCellNum; i++)
    {
        HSSFCell cell = row.GetCell(i);
        if(cell == null)
        {
            dr[i] = null;
        }
        else
        {
            dr[i] = cell.ToString();
        }
    }
    dt.Rows.Add(dr);
}


评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值