如何“读取”存储为sharepoint spfile的excel 2003文档?我可以使用SPFile.OpenBinary()从库中检索文档,然后将其放入MemoryStream中。
最初的想法是使用OpenXML来查询文档(将此对象类型作为构造函数),但Excel版本(2003)禁止这样做。
为了进一步解决这个问题,我无法保证主机上会有任何Excel版本,因此也可能无法使用互操作程序集。
将非常感谢您提出建议或解决方案。
当我说读时,我的意思是从命名范围,单元格引用等中提取数据。我发现的所有开源库(Exceldatareader,NOPI,OpenXML)都有一些限制或禁止使用它们。例如无法加载启用宏的工作表
将excel文档加载到sharepoint库中,该库将此列表公开为SPFile的集合。这些文件可以简单地读入MemoryStream,但我尝试过的大多数库都需要一个文件流构造函数,这意味着写入应用程序服务器上的文件系统
我没有尝试过SpreadsheetGear,但是如果文件系统上没有足迹,那么我会确定一下,但这不是这个项目的选项。我会用我的发现更新这个帖子......
我已经减少使用PIA了。脏,脏,脏。
答案 0 :(得分:1)
SpreadsheetGear for .NET可以使用SpreadsheetGear.Factory.GetWorkbookSet()。Workbooks.OpenFromStream(System.IO.Stream)从内存流中打开xls和xlsx工作簿,并且还可以直接从字节数组打开使用OpenFromMemory(byte [])。一旦打开,SpreadheetGear就会有一个全面的API,计算引擎,渲染引擎等等。
免责声明:我拥有SpreadsheetGear LLC
答案 1 :(得分:0)
我在codeplex上找到了这个[library](http://exceldatareader.codeplex.com/),它似乎能够读取任何Excel版本。网上可能还有更多内容
答案 2 :(得分:0)
当你说读到底是什么意思?开发人员似乎对该术语的定义存在一些争议。无论哪种方式,如果Excel在他们的系统上是不是真的重要,因为我只是非常确定如果该人想要以任何方式查看文件,至少他们需要一个读者。所以说,我相信你的恐惧是一个没有实际意义的点,并且使用MemoryStream就足够了。