我试图找到一种适当的方法来读取NT服务器操作系统上的Excel文件的内容。 我在使用Excel API时遇到许多问题,然后在Office Automation上遇到了正式的Microsoft,它指出Excel API不适合Excel自动化。 我看到的排序问题与文章中描述的类似。

有没有其他方法可以使我在服务器(无UI)上读取Excel文件(xls,xlsx,xlsm),而不会遇到Excel API中强加的相同类型的线程/安全/许可证问题?

香港专业教育学院试图使这是一个更合适的问题。 这是一个很旧的代码,因此我无法提供任何示例代码/异常,但是我认为对于其他用户而言可能是值得的。

有许多库由不同的用户突出显示,它们允许所需的功能。我在这里列出了它们,并对其中一些进行了评估,因此在适当的地方,我试图提出一些有趣的评论以进行比较。我所包含的详细信息完全基于观点,但是这些库中的任何一个都可能实现所需的目标。

SpreadsheetGear.Net

(由于购买成本高而无法评估)

Aspose.Cells

(由一位同事评估。实施起来相当简单,性能可与Excel Interop媲美)。

宝石盒

(未评估)

Excel服务

(似乎仅包含在SharePoint 2007中)

Excel Mapper

(没有评估,因为它要求将强类型的对象导入其中而不符合我的要求)。

SmartXls

(没有评估,因为它要求将强类型的对象导入其中而不符合我的要求)。

ActiveXls

(相当容易使用,缺少Properties会引发问题,他们偏向于琐碎的操作方法。尽管声称1M记录是由便宜的FlexCel执行的,但已经决定了help / API手册几乎是无用的。)

库格拉

(由于未找到任何文档/信息而未进行评估)

文件助手

(未评估)

Flexcel

(找到了最低成本的解决方案,性能良好,并且易于实现,并且非常接近Excel Interop结构。也得到了支持人员对技术问题的快速响应。可能是我的选择。)

SyncFusion BackOffice

(中等成本且结构合理。不幸的是,在运行单元测试时,实现起来更加困难且结果不一致。还收到了许多"尝试读取受保护的内存"错误,这不鼓励我使用纯托管库。)

出色的工作伊恩。您可能想突出显示Flexcel,因为它是您选择的选项。看起来很不错。

嗨,伊恩,谢谢你的推荐。您知道吗,这些库中是否有一个支持包含宏/ VBA函数的电子表格的计算?我很难找到....

@Marc:我怕我不知道-我没有深入研究高级用法。我相信FlexCel可以使用某种方式注册自定义事件+代码,但基本上必须在您的C#代码库中进行复制。

嗨,伊恩,没关系,非常感谢您!该列表确实有帮助!香港专业教育学院尝试了几乎所有的人,似乎没有人支持VBA的计算...祝您好运!

要使用C#读取Excel文件而不安装Excel,可以使用Apache的POI。

这是一个用于读写MS Office格式的Java库。由于它是Java,并且您正在使用C#,因此需要IKVM和POI项目中的java类。

但是,最简单的方法是仅下载Jon Iles优秀的MPXJ项目,您已经掌握了全部。只需设置对IKVM.OpendJDK.ClassLibrary.dll,IKVM.Runtime.dll,poi-3.2-FINAL-20081019.dll的引用

我共同编写了一个快速的控制台应用程序,向您展示了一种读取Excel .xls工作表的简单方法。它仅读取第一张工作表,并且不使用行或单元格迭代器,但是可以很好地完成工作。

注意:您需要查看org.apache.poi.ss以确保您可以读取.xlsx等文件。

//C# code for using the Apache POI libraries

using System;

using System.Collections.Generic;

using System.Text;

// poi for xls

using org.apache.poi;

using org.apache.poi.poifs;

using org.apache.poi.poifs.filesystem;

using org.apache.poi.hssf;

using org.apache.poi.hssf.usermodel;

using org.apache.poi.ss;

namespace ConsoleApplication1

{

class Test

{

static void Main(string[] args)

{

if (args.Length != 1)

{

Console.Out.WriteLine("Usage: XLSReadTest ");

}

else

{

XLSRead x = new XLSRead();

x.Process(args[0]);

//x.Process("c:\\temp\\testfile.xls");

}

}

}

class XLSRead

{

public void Process(string inputFile)

{

int r = 0;

Console.Out.WriteLine("Reading input file started.");

DateTime start = DateTime.Now;

java.io.InputStream inputStream = new java.io.FileInputStream(inputFile);

POIFSFileSystem fs = new POIFSFileSystem(inputStream);

HSSFWorkbook wb = new HSSFWorkbook(fs);

HSSFSheet sh = wb.getSheetAt(0);

r = sh.getFirstRowNum();

while (r <= sh.getLastRowNum())

{

HSSFRow row = sh.getRow(r);

int c = row.getFirstCellNum();

string val ="";

while (c < row.getLastCellNum())

{

HSSFCell cell = row.getCell(c);

switch(cell.getCellType())

{

case HSSFCell.CELL_TYPE_NUMERIC:

val = cell.getNumericCellValue().ToString();

break;

case HSSFCell.CELL_TYPE_STRING:

val = cell.getStringCellValue();

break;

}

Console.Out.WriteLine("Row:" + r +", Cell:" + c +" =" + val);

c++;

}

r++;

}

long elapsed = DateTime.Now.Ticks - start.Ticks;

String seconds = String.Format("{0:n}", elapsed / 1000000);

Console.Out.WriteLine("

Reading input file completed in" + seconds +"s." +"

");

}

}

}

标记,不适添加到读者列表。老实说,对于我正在从事的项目,我们可能不希望采用这种方式,因为其中涉及的库更多,从而导致更多的维护等。我们需要一些简单的方法来以合理的成本实现免维护的免维护费。这些是我一直在评估可能性的一些事情,我认为这可能有点涉及。

我以前使用过ADO.NET从xls中获取数据。我不确定这将支持所有的Excel Doc类型,但请查看使用ADO.NET C#DbProviderFactory读取和写入Excel电子表格。

这也是来自SO问题的一些代码。

我无需安装Office或任何第三方工具就可以读写excel。

ADO.NET实际上对此非常有效,根本不需要安装Excel。

不幸的是,ADO无法满足我们的需求。我不确定细节,但另一位开发人员未能完全按照我们想要的方式工作,因此ADO是行不通的。不过谢谢你的帖子。

如果您可以获得更多信息,我们可能可以帮助您解决ADO.NET中遇到的问题。

用于Excel的OLEDB / ODBC接口不支持SpreadsheetML或OpenXML格式,存在工作表和命名范围与某些命名约定不匹配的问题,如果列的前几行不包含长度大于255的数据,则可能导致截断字符,然后是在这些列中具有较长字符串的行。这些只是我从做这些日子以来记得的一些问题。现在,我仅导出和导入SpreadsheetML,这是对用户的轻微培训问题,但在应用程序稳定性方面带来了巨大的好处。

我认为为了这个线程的好处,我不得不提到EPPlus。它是一个可在Codeplex中使用的开源项目。

我已经在多个项目中使用了它,但从未遇到过问题。

您是否尝试过.net的SmartXLS?

还是ActiveXLS?

不,我没有。谢谢你的建议。

这是可以读取.xls和xlsx文件的内容。它是开源的。 http://code.google.com/p/excelmapper/。

它基本上是一个ORM,因此您只需要处理对象而不是OleDB。

我实际上是在发布此信息后才发现的。 Havent有机会对此进行了调查,但谢谢。

不幸的是,我认为那不是我想要做的事情。查看Excel映射器,似乎它仅导入具有给定结构的对象,因此有很多要填充的强类型字段。我的数据一开始是未知类型,然后我需要阅读Excel并从中确定类型,因此我认为这不适合该任务。

Ian,ExcelMapper下载包含一个exe(BuildDTOsFromExcel),您可以在excel文件上运行该文件以生成强类型对象。它将根据列数据找出数据类型。正如您提到的,这里的问题是,每次更改数据类型时都必须运行此程序,因此某种程度上它必须事先知道数据类型。

这很公平,但是我们已经有一个通用的系统可以执行此操作,并且需要读取我可能应该在原始帖子中建议的RAW数据。

Excel。

经过多年努力阻止人们在服务器上使用Excel,他们已经放弃/拥抱了市场需求,并开始对此提供支持。

2007年对此有所改进,而Excel 2010应该具有更多改进。

斯科特,我们必须至少支持Excel 2003(可能是2000)。我们需要支持的至少一个版本无法在Vista服务器上运行。因此,如果我们可以使用Excel,则根本没有帮助。

我不确定为什么SO广告与您的问题无关。

微软有类似的东西叫做Excel Services。我想,这可以让您以网络服务风格使用Excel。我认为SpreadSheetGear是Microsoft用来显示的广告。 :)

服务器读取excel文件,关于c#:作为服务器进程读取Excel文件相关推荐

  1. linux命令生成hprof文件,Android平台生成任意进程的hprof文件

    一.知识介绍 1.1 为什么要抓取hprof hprof文件中记录了当前进程内存的使用情况,对于一些难以解决的OOM问题,提取出对应进程的hprof文件可以很好的分析这种问题. 分析hprof的工具 ...

  2. Linux获取执行文件路径,如何 获取linux进程的执行文件路径

    进入/proc目录 ps查看所有契合 ./cmd的进程,找出其对应的进程号 用ll命令: ll 进程号 如下显示一个示例: [root@Cluster1 proc]# ll 22401 total 0 ...

  3. linux进程获取执行文件路径,如何 获取linux进程的执行文件路径

    进入/proc目录 ps查看所有契合 ./cmd的进程,找出其对应的进程号 用ll命令: ll 进程号 如下显示一个示例: [root@Cluster1 proc]# ll 22401 total 0 ...

  4. oracle 跨服务器推送视图_Oracle11g的v$diag_info视图获得控制文件转储文件名及位置...

    概述 今天主要介绍下Oracle的v$diag_info视图,这个视图也是11g的新特性之一.下面先介绍下11g新引入的ADR特性. 一.11g的ADR 在11g中引入了自动诊断资料档案库(Autom ...

  5. 查看文件(或文件夹)被哪个进程使用【文件已在另一程序中打开】

    轻松查看文件被哪个进程使用  有时候小伙伴们正在或刚使用过的文件夹或者某个文件,想要把它移动到其它的位置,或者删除它,又或者仅仅想重命名这个文件,但是在操作过程中,我们发现它弹出来了文件夹或者文件正在 ...

  6. 怎样关闭2345迷你新闻弹窗和更隐蔽的迷你新闻弹窗呢,找到进程删除相应文件,终于解决了,记录一下屏蔽后的喜悦

    精彩集锦之举一反三培养SKILL:自己总结的核心思路就是--"任何弹窗文件都是程序,只要它弹出来了说明它在工作,它在工作说明它就有进程,任何的正规程序,都可以在任务管理器上找到相应的进程,而 ...

  7. linux服务器上的项目读取本地文件,java访问linux服务器读取文件路径

    java访问linux服务器读取文件路径 内容精选 换一换 通过ADC将文件传输到Host.参见准备环境完成环境配置.以运行用户登录安装Toolkit组件的服务器.执行命令,将A.java文件传输到H ...

  8. 本地服务器json文件,从本地ftp服务器读取Json文件

    我是存储在本地服务器中的名为File1.js的json文件.我想读取json文件的内容,并希望在其他文件中显示数据.我已经尝试使用JavaScript编码,但它不能正常工作.从本地ftp服务器读取Js ...

  9. linux服务器不允许下载文件,关于从Linux服务器下载Excel文件的问题

    本地下载文件可以,可是把代码放到Linux服务器下载下来的是jsp页面内容,下载的Excel文件中的内容则是jsp中展示的内容 相关代码 response.setCharacterEncoding(& ...

最新文章

  1. Eclipse导入Maven项目出现错误:Unsupported IClasspathEntry kind=4
  2. 关于Task类处理多线程简单示例
  3. 信息报送不及时整改措施_工商年报如何报送?原来这才是正确打开方式
  4. makefile obj文件路径_Makefile一问:如何修改.o输出文件的输出路径 Linux/Unix社区 / 程序开......
  5. python 里面的单下划线与双下划线的区别
  6. python项目开发案例集锦_在线分享 | 在 VS Code 中一站式完成 Python 项目开发
  7. 白银T+D [Ag(T+D)]业务介绍
  8. C++ STL中Map的按Key排序和按Value排序
  9. 数据结构 创建顺序表
  10. JavaScript-箭头函数
  11. 华为内部几近满分的项目管理PPT,牛逼了
  12. 列表,元组,字典,集合类型变量相关内置函数详解
  13. 浅谈CA与证书以及Openssl管理证书
  14. 什么是零信任?零信任的好处有哪些?
  15. HTML教程(8)-播放音乐
  16. 关于MAXIMO数据限制代码的理解
  17. voip 软电话 客户端实例 SIP
  18. bcdedit编辑启动项 禁用数字签名
  19. Oracle和MySQL不同编码格式下varchar所能存储的中文数量
  20. 将Outlook中的邮件保存到本地磁盘,释放邮箱空间

热门文章

  1. 网站用户行为日志采集和后台日志服务器搭建
  2. 机甲 java_强殖机甲之变身斗士
  3. 烹饪专业的计算机课程,烹饪专业计算机应用基础教学的思考.PDF
  4. 如何使用Shiro实现不同用户登录成功后跳转到不同主页?
  5. 龙芯3A5000下最新gcc 12.1交叉编译器获取与使用
  6. php 横拍还是竖拍,用手机拍照片,应该选择横拍还是竖拍?其实里面大有讲究...
  7. C语言fmod()函数:对浮点数取模(求余)和%取余运算符的比较
  8. matlab 二进制补码转十进制,matlab十进制与二进制补码之间的转换
  9. 集合(一)集合的引入及其概念、List、ArrayList、LinkedList
  10. 3.用swi指令验证异常处理流程(四大步三小步)