服务器读取excel文件,关于c#:作为服务器进程读取Excel文件
我试图找到一种适当的方法来读取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文件相关推荐
- linux命令生成hprof文件,Android平台生成任意进程的hprof文件
一.知识介绍 1.1 为什么要抓取hprof hprof文件中记录了当前进程内存的使用情况,对于一些难以解决的OOM问题,提取出对应进程的hprof文件可以很好的分析这种问题. 分析hprof的工具 ...
- Linux获取执行文件路径,如何
获取linux进程的执行文件路径
进入/proc目录 ps查看所有契合 ./cmd的进程,找出其对应的进程号 用ll命令: ll 进程号 如下显示一个示例: [root@Cluster1 proc]# ll 22401 total 0 ...
- linux进程获取执行文件路径,如何
获取linux进程的执行文件路径
进入/proc目录 ps查看所有契合 ./cmd的进程,找出其对应的进程号 用ll命令: ll 进程号 如下显示一个示例: [root@Cluster1 proc]# ll 22401 total 0 ...
- oracle 跨服务器推送视图_Oracle11g的v$diag_info视图获得控制文件转储文件名及位置...
概述 今天主要介绍下Oracle的v$diag_info视图,这个视图也是11g的新特性之一.下面先介绍下11g新引入的ADR特性. 一.11g的ADR 在11g中引入了自动诊断资料档案库(Autom ...
- 查看文件(或文件夹)被哪个进程使用【文件已在另一程序中打开】
轻松查看文件被哪个进程使用 有时候小伙伴们正在或刚使用过的文件夹或者某个文件,想要把它移动到其它的位置,或者删除它,又或者仅仅想重命名这个文件,但是在操作过程中,我们发现它弹出来了文件夹或者文件正在 ...
- 怎样关闭2345迷你新闻弹窗和更隐蔽的迷你新闻弹窗呢,找到进程删除相应文件,终于解决了,记录一下屏蔽后的喜悦
精彩集锦之举一反三培养SKILL:自己总结的核心思路就是--"任何弹窗文件都是程序,只要它弹出来了说明它在工作,它在工作说明它就有进程,任何的正规程序,都可以在任务管理器上找到相应的进程,而 ...
- linux服务器上的项目读取本地文件,java访问linux服务器读取文件路径
java访问linux服务器读取文件路径 内容精选 换一换 通过ADC将文件传输到Host.参见准备环境完成环境配置.以运行用户登录安装Toolkit组件的服务器.执行命令,将A.java文件传输到H ...
- 本地服务器json文件,从本地ftp服务器读取Json文件
我是存储在本地服务器中的名为File1.js的json文件.我想读取json文件的内容,并希望在其他文件中显示数据.我已经尝试使用JavaScript编码,但它不能正常工作.从本地ftp服务器读取Js ...
- linux服务器不允许下载文件,关于从Linux服务器下载Excel文件的问题
本地下载文件可以,可是把代码放到Linux服务器下载下来的是jsp页面内容,下载的Excel文件中的内容则是jsp中展示的内容 相关代码 response.setCharacterEncoding(& ...
最新文章
- Eclipse导入Maven项目出现错误:Unsupported IClasspathEntry kind=4
- 关于Task类处理多线程简单示例
- 信息报送不及时整改措施_工商年报如何报送?原来这才是正确打开方式
- makefile obj文件路径_Makefile一问:如何修改.o输出文件的输出路径 Linux/Unix社区 / 程序开......
- python 里面的单下划线与双下划线的区别
- python项目开发案例集锦_在线分享 | 在 VS Code 中一站式完成 Python 项目开发
- 白银T+D [Ag(T+D)]业务介绍
- C++ STL中Map的按Key排序和按Value排序
- 数据结构 创建顺序表
- JavaScript-箭头函数
- 华为内部几近满分的项目管理PPT,牛逼了
- 列表,元组,字典,集合类型变量相关内置函数详解
- 浅谈CA与证书以及Openssl管理证书
- 什么是零信任?零信任的好处有哪些?
- HTML教程(8)-播放音乐
- 关于MAXIMO数据限制代码的理解
- voip 软电话 客户端实例 SIP
- bcdedit编辑启动项 禁用数字签名
- Oracle和MySQL不同编码格式下varchar所能存储的中文数量
- 将Outlook中的邮件保存到本地磁盘,释放邮箱空间
热门文章
- 网站用户行为日志采集和后台日志服务器搭建
- 机甲 java_强殖机甲之变身斗士
- 烹饪专业的计算机课程,烹饪专业计算机应用基础教学的思考.PDF
- 如何使用Shiro实现不同用户登录成功后跳转到不同主页?
- 龙芯3A5000下最新gcc 12.1交叉编译器获取与使用
- php 横拍还是竖拍,用手机拍照片,应该选择横拍还是竖拍?其实里面大有讲究...
- C语言fmod()函数:对浮点数取模(求余)和%取余运算符的比较
- matlab 二进制补码转十进制,matlab十进制与二进制补码之间的转换
- 集合(一)集合的引入及其概念、List、ArrayList、LinkedList
- 3.用swi指令验证异常处理流程(四大步三小步)