首页 > (转)koogra--Excel文件读取利器

(转)koogra--Excel文件读取利器

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

下面是一个例子:

   ///



   /// This method just exercises the excel workbook data.

   ///


   /// The path to the workbook.

   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

將 ExcelRecordsBoundSheetRecord.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

转载于:https://www.cnblogs.com/codeyu/archive/2009/07/09/1520104.html

更多相关:

  • Open3D是一个开源库,支持快速开发和处理3D数据。Open3D在c++和Python中公开了一组精心选择的数据结构和算法。后端是高度优化的,并且是为并行化而设置的。本系列学习计划有Blue同学作为发起人,主要以Open3D官方网站的教程为主进行翻译与实践的学习计划。点云PCL公众号作为免费的3D视觉,点云交流社区,期待有使用Op...

  • 业务场景: 我在一个bash脚本中修改了PATH变量的内容,并将其保存到/etc/profile文件中,同时执行了 source /etc/profile 但是当脚本退出时,我发现PATH变量还是没有修改生效,但是,如果我在命令行再直接执行 source /etc/profile 才发现PATH生效了。 请问,这是什么原因呢?...

  • 给定一个二叉树与整数sum,找出所有从根节点到叶结点的路径,这些路 径上的节点值累加和为sum 即创建一个二叉树,要求二叉树中有一个路径从根节点到叶节点到路径加起来代表到和为 给定的sum 如下二叉树 给定路径之和为18,则需要输出两条路径: [1,4,5,8] [1,4,6,7] 同样,这个过程我们可以使用先序深度优先搜索,同...

  • export PATH=$PATH:/usr/local/php/bin 转载于:https://www.cnblogs.com/ttiandeng/p/6554902.html...

  • 2019独角兽企业重金招聘Python工程师标准>>> 每台计算机安装程序不同,环境变量path会有不同,若误删了环境变量path,可以如下完美解决.   Win+R 输入regedit打开注册表(开始-运行里输入regedit)  找到  HKEY_LOCAL_MACHINESYSTEMControlSet002...

  • importjava.security.SecureRandom;importjavax.crypto.Cipher;importjavax.crypto.SecretKey;importjavax.crypto.SecretKeyFactory;importjavax.crypto.spec.DESKeySpec;//结果与DES算...

  • 题目:替换空格 请实现一个函数,把字符串 s 中的每个空格替换成"%20"。 输入:s = "We are happy." 输出:"We%20are%20happy." 限制: 0 <= s 的长度 <= 10000 解题: 时间复杂度:O(n) 空间复杂度:O(n) class Solution { public:s...

  • 在C++11标准库中,string.h已经添加了to_string方法,方便从其他类型(如整形)快速转换成字面值。 例如: for (size_t i = 0; i < texArrSize; i++)RTX_Shader.SetInt(string("TexArr[") + to_string(i) + "]", 7 + i);...

  • Ubuntu 14.04安装并升级之后,变成楷体字体非常难看,我昨天搞了一晚上,终于理了个头绪,这里整理一下。 经过网上调研,大家的一致看法是,使用开源字体库文泉驿的微黑字体效果比较理想,甚至效果不输windows平台的雅黑字体。下面我打算微黑来美化Ubuntu 14.04. 1.安装文泉驿微黑字体库 sudo aptitude...

  • 使用string时发现了一些坑。 我们知道stl 容器并不是线程安全的,所以在使用它们的过程中往往需要一些同步机制来保证并发场景下的同步更新。 应该踩的坑还是一个不拉的踩了进去,所以还是记录一下吧。 string作为一个容器,随着我们的append 或者 针对string的+ 操作都会让string内部的数据域动态增加,而动态增加的...