koogra--Excel文件读取利器

转自

http://hi.baidu.com/david_jdai/item/d3bf00262cd904140975085d

 

 

koogra是一个.net平台下开源的excel读取程序,可以在开源社区下载它。使用它我们无需office就可以读取excel文件。尽管这个程序已经停止了更新,但是它还是很好用的。下面介绍怎么使用它。
下载到该程序的源代码,编译生成Net.SourceForge.Koogra.dll。在项目中引用该dll,using Net.SourceForge.Koogra.Excel;

Workbook wb = new Workbook(path);path是文件的物理路径,这可以创建一个excel文件对象
Worksheet xSheet = xBook.Sheets[0];引用Workbook 的工作表
xBook.Sheets.GetByName(string)还可以通过这个方法获取对Workbook 工作表的引用。
xBook.Sheets.Rows[i]对excel行的引用
xBook.Sheets.Rows[i].Cells[i]对单元格的引用

xSheet.Rows.FirstRow 首行的行号,从0开始
xSheet.Rows.LastRow   尾行的行号,对于中间有空行,可以用xSheet.Rows[i]==null判断
Cells对应的也有FirstCol,LastCol属性,对于Cells为NUll的情况下不能使用Cells.Value

下面是一个例子:
   /// <summary>
   /// This method just exercises the excel workbook data.
   /// </summary>
   /// <param name="path">The path to the workbook.</param>
   private Workbook DumpWorkbookToConsole(string path)
   {
    // print the path
    Console.WriteLine(path);

    // construct our workbook
    Workbook wb = new Workbook(path);

    // dump the worksheet data
    foreach(Worksheet ws in wb.Sheets)
    {
     Console.Write("Sheet is ");
     Console.Write(ws.Name);

     Console.Write(" First row is: ");
     Console.Write(ws.Rows.FirstRow);

     Console.Write(" Last row is: ");
     Console.WriteLine(ws.Rows.LastRow);

     // dump cell data
     for(int r = ws.Rows.FirstRow; r <= ws.Rows.LastRow; ++r)
     {
      Row row = ws.Rows[(ushort)r];

      if(row != null)
      {
       Console.Write("Row: ");
       Console.Write(r);

       Console.Write(" First Col: ");
       Console.Write(row.Cells.FirstCol);

       Console.Write(" Last Col: ");
       Console.WriteLine(row.Cells.LastCol);

       for(int c = row.Cells.FirstCol; c <= row.Cells.LastCol; ++c)
       {
        Cell cell = row.Cells[(byte)c];

        Console.Write("Col: ");
        Console.Write(c);

        if(cell != null)
        {
         Console.Write(" Value: ");
         Console.Write(cell.Value);
         Console.Write(" Formatted Value: ");
         Console.WriteLine(cell.FormattedValue());
        }
        else
         Console.WriteLine(" null");
       }
      }
     }
    }

    return wb;
   }
更多的功能有待大家去发掘,呵呵~反正是C#写的,源代码也有,慢慢看吧。此外另一个开源的东东:myxls支持excel的读写,现在依然在更新,也是很不错的。

koogra一些修正:
1. 修正中文工作表名乱码的BUG
將 \Excel\Records\BoundSheetRecord.cs 34~38行

ushort nameLen = reader.ReadUInt16();
StringBuilder nb = new StringBuilder(nameLen);
nb.Append(new string(reader.ReadChars(nameLen)));

_name = nb.ToString();

改成

ushort nameLen = (ushort)reader.ReadByte();
bool compressed = (reader.ReadByte() * 0x01) == 0;

if (!compressed) {
    nameLen *= 2;
}

byte[] charBytes = reader.ReadBytes(nameLen);

if (compressed) {
    //decompress
    byte[] wideBytes = new byte[charBytes.Length * 2];
    for (int i = 0; i < charBytes.Length; i++)
        wideBytes[2 * i] = charBytes[i];
    charBytes = wideBytes;
}

_name = new string(Encoding.Unicode.GetChars(charBytes));

2.调整日期的默认格式
讀取 excel 裏的日期資料,譬如 2007/3/5
用cell.FormattedValue() 會取得字串 "3/5/07"
那通常不是我想要的,所以我修改了原本的 Cell.cs
public string FormattedValue() {
...
...
// get the format string
string formatString = format.FormatValue;
+if (formatString == "M/D/YY") {
+ formatString = "yyyy/MM/dd";
+}
-----------------本bloger的话-------------------
今天发现koogra已经更新到3.1.1版。只有dll文件。不过可以用reflector反编译得到源代码。
项目地址:koogra

 
 

时间: 2024-09-28 20:38:05

koogra--Excel文件读取利器的相关文章

java遍历服务器里的所有excel文件读取特定单元格的值,循环读取文件的代码怎么写

问题描述 java遍历服务器里的所有excel文件读取特定单元格的值,循环读取文件的代码怎么写 package com.excel.action; import java.io.File; import java.io.FileInputStream; import java.io.InputStream; import jxl.Cell; import jxl.CellType; import jxl.LabelCell; import jxl.Sheet; import jxl.Workbo

excel文件读取例子-jxl

注意版本是: 2003 excel格式   package com.yanek.test; import java.io.FileInputStream;import java.io.FileNotFoundException;import java.io.IOException;import java.io.InputStream; import jxl.Cell;import jxl.Sheet;import jxl.Workbook;import jxl.read.biff.BiffExc

python使用xlrd模块读写Excel文件的方法

  这篇文章主要介绍了python使用xlrd模块读写Excel文件的方法,较为详细的分析了xlrd模块的安装.使用与操作Excel文件的相关技巧,需要的朋友可以参考下 一.安装xlrd模块 到python官网下载http://pypi.python.org/pypi/xlrd模块安装,前提是已经安装了python 环境. 二.使用介绍 1.导入模块 代码如下: import xlrd 2.打开Excel文件读取数据 代码如下: data = xlrd.open_workbook('excelF

php 导入excel文件mysql数据库方法

先下载 下载phpexcel文件,地址:phpexcel.codeplex.com/ 在reader.php文件中找到以下类似代码(第一行既是),改成正确的oleread.php路径即可:require_once 'oleread.php'; 然后新建一个php文件引入reader.php, 代码如下:  代码如下 复制代码 <?php require_once 'Excel/reader.php'; $data = new Spreadsheet_Excel_Reader(); $data->

导入-Java从excel读取数据时,能够自己选择excel文件,不用在代码中将文件目录写死!

问题描述 Java从excel读取数据时,能够自己选择excel文件,不用在代码中将文件目录写死! 项目是进行单机版和网络版的数据对比,需要将单机版导出来的数据(excel表格,固定格式)导入网络版进行对比,网络版在导入数据时能提示选择导入的excel文件,不用在Java代码中将要读取数据的excel表格的目录写死.谢谢您的帮助! 解决方案 JAVA读取EXCEL用的比较多的是POI类库,参考Java对Excel(0307)进行上传.解析.验证.入库,或者你搜索一下java poi,有很多文章的

C#中Excel文件的读取

excel 提供两种方法:一个是直接打开excel文件,然后逐行读取,速度较慢:还有一种方法是通过OleDb连接,把excel文件作为数据源来读取方法一:这种直接读取单元格的方法释放很重要.    Excel.Application excel = null;   Excel.Workbooks wbs = null;   Excel.Workbook wb = null;   Excel.Worksheet ws = null;   Excel.Range range1 = null;   o

ADO.NET读取Excel文件并作为数据源

项目中需要用的功能,贴上代码了. 需要注意的地方:配置Web.config的时候要注意版本问题! //若是在Web.config中配置数据源,如下 <add key="ExcelConnectionString" value="Provider=Microsoft.Jet.OLEDB.4.0; Data Source='miroExcel/Info.xls';Extended Properties='Excel 8.0;HDR=yes;IMEX=2'"/>

直接读取Excel文件数据

前言 由于种种需要直接进行读取Excel文件数据,然而在网上Search多次也没有找到好的方法, 一般就通过ODBC或OLE方式进行读取,但这两种方法都具有局限性...(我相信大家都很清楚). 怎么办呢?没办法了,只好选择最艰难的路了--分析Excel文件格式. 介绍 MS Excel是众所周知的电子表格处理软件.Excel文件格式是特定的BIFF(Binary Interchange File Format),BIFF里存储了很多记录,第条记录包括记录头和记录体.记录头是4byte,前两位指定

使用Apache POI读取Excel文件

Apache POI是Apache软件基金会的开放源码函式库,用来帮助Java程序读写Microsoft Office的格式档案.POI提供了下面这几种类型对Microsoft Office的格式档案进行解析: HSSF - 提供读写Microsoft Excel XLS格式档案的功能. XSSF - 提供读写Microsoft Excel OOXML XLSX格式档案的功能. HWPF - 提供读写Microsoft Word DOC格式档案的功能. HSLF - 提供读写Microsoft