问题标签 [npoi]
For questions regarding programming in ECMAScript (JavaScript/JS) and its various dialects/implementations (excluding ActionScript). Note JavaScript is NOT the same as Java! Please include all relevant tags on your question; e.g., [node.js], [jquery], [json], [reactjs], [angular], [ember.js], [vue.js], [typescript], [svelte], etc.
c# - 通过 HSSF.EventUserModel 使用受保护的书籍和工作表读取 XLS
最终目标:CellRecords
有效地(一次通过)在一个巨大的(30,000+ 行)上读取所有内容,受保护Worksheet
。
问题:
使用HSSF.EventUserModel
,我如何读取具有 Workbook 和 Worksheet 保护的 XLS 文件的所有Record
s(包括)?CellRecords
创建输入电子表格(在 Excel 2010 中):
- 创建新的空白工作簿。
- 将 A1 的值设置为数字:50
- 将 A2 的值设置为字符串:五十
- 将A3的值设置为公式:=25*2
- 审查(功能区)-> 保护工作表-> 密码:pass1
- 审查(功能区)-> 保护工作簿-> 密码:pass1
- 文件(功能区)->另存为...->另存为类型:Excel 97-2003 工作簿
迄今为止的进展:
- XLS 文件在 Excel 中打开时没有密码。因此,您不需要密码即可在 POI 中打开它。
- XLS 文件以
new HSSFWorkbook(Stream fs)
. 但是,我需要EventUserModel
实际电子表格的效率。 - 设置
NPOI.HSSF.Record.Crypto.Biff8EncryptionKey.CurrentUserPassword = "pass1";
不起作用。 - 该
ProcessRecord( )
函数捕获 aPasswordRecord
,但我找不到任何有关如何正确处理它的文档。 - 也许,
EncryptionInfo
orDecryptor
类可能有一些用处。
注意:
我正在使用 NPOI。但是,我可以将任何 java 示例转换为 C#。
代码:
我使用以下代码来捕获Record
事件。我的Book1-unprotected.xls
(无保护)显示所有Record
事件(包括单元格值)。MyBook1-protected.xls
显示一些记录并引发异常。
我只是processedEvents
在调试器中查看。
更新(针对胡安·梅拉多):
以下是例外。我现在最好的猜测(在 Victor Petrykin 的回答中)是不能本地解密受保护记录的HSSFEventFactory
用途。RecordInputStream
收到异常后,processedRecords
包含 22 条记录,其中包括以下可能重要的记录:
- processesRecords[5] 是一个
WriteAccessRecord
带有乱码(可能是加密)的值.name
- processesRecords[22] 是一个
RefreshAllRecord
并且是Record
列表中的最后一个
例外:
c# - NPOI 和 setCellFormula():小数分隔符被截断
使用 C# 将 NPOI 1.2.5 的这个公式从一个单元格复制到另一个单元格时,我遇到了一个严重的问题:
原始单元格包含以下内容:
结果单元格准确地报告了这个公式,但小数分隔符被去掉了。所以我明白了:
这是我在 setFormula() 之后的调试器视图:
任何帮助将不胜感激。
c# - NPOI:编辑单元格
我正在使用以下代码编辑 excel 文件的单元格,但在 escel 文件中看不到我的更改。
而且我在其中找不到任何Save()
功能。请让我知道如何保存我的编辑。
c# - CellStyle 意外应用于工作表中的所有单元格 - NPOI?
我不明白为什么会发生这种情况,首先我尝试在第一行的列标题中应用粗体文本,然后我想将标题单元格的边框设置为 MEDIUM,但是这种 MEDIUM 边框样式适用于中的所有单元格工作表。下面的相同代码中还有更多问题:
- 我的列标题(第一行)中的文本不是我想要的粗体。
- 我的列标题中的文本颜色不是我想要的红色。
这是我的代码(使用 NPOI 库处理):
请为我修复它,我对 NPOI 很陌生,刚刚尝试使用它。您的帮助将不胜感激。谢谢。(<---我不知道为什么这个“谢谢”不能跳到下一行,即使我在输入之前输入了 Enter)
c# - 无法使用 NPOI 编辑现有 Excel 文件?
我尝试使用 NPOI 创建一个新的 Excel 文件,它工作正常,读取(仅)一个 Excel 文件也可以。但是现在我想打开一个现有的 Excel 文件并在其上附加一些行,它在 NPOI.HSSF.UserModel.HSSFWorkbook 构造函数的代码行中崩溃了。这是代码:
没有异常细节,只是显示一个窗口说应用程序崩溃并提供3个选项可供选择,中间一个是关闭应用程序:
快照
这就是为什么我无法理解并很难解决它。
如果我将 FileMode 更改为 FileMode.Open,则构造函数可以正常工作,但这只是为了阅读。我认为有一些与 FileAccess 政策相关的事情并尝试了这个:
我尝试了一种解决方法,方法是打开(只读)现有的 Excel 文件,复制其中的 1 张并将此表添加到新的 HSSFWorkbook 并将(只写)写入新的文件流,但是没有办法做到这一点,因为 HSSFWorkbook 没有 Worksheet 的集合,也没有 Add 方法,所以新的工作表只是通过 CreateSheet() 方法创建的。这太烦人了。
你能帮我解决这个问题吗?我先尝试 NPOI,然后再尝试 EPPlus。
您的帮助将不胜感激。
谢谢。
c# - NPOI 是否支持 .xlsx 格式?
NPOI DLL 会识别.xlsx
文件吗?
目前我正在为 Microsoft Excel 97-2003 使用 NPOI 1.2.5 版本的 DLL,但我还需要访问 Excel 扩展表.xlsx
。
NPOI 会支持上述内容吗?
代码片段:
c# - Excel公式框中的字体错误?
我有一个 Excel 文件 (.xls),它有大约 1400 行,有一些行以正确的字体显示(在表格单元格和停靠在顶部的公式框中)。但是,有些行在工作表单元格中以正确的字体显示,但如果我选择它并查看公式框,它会以错误的字体(某种错误或不受支持的字体)显示所选行的文本。
我的 excel 文件的内容包含 unicode 文本,我的笔记本电脑安装了最常见的 unicode 字体(只是我的语言需要 unicode 才能正确显示,而且我总是安装许多 unicode 字体)。我正在使用 Excel 2013,但我认为问题与缺少字体无关……也许公式框和工作表单元格使用不同的字体。值得注意的一点是,在公式框中以错误字体显示其内容的所有单元格(我将这些单元格称为 B 组单元格)的格式与其他单元格的字体不同(我将这些单元格称为 A 组单元格)。我尝试将 B 组单元格的字体更改为 A 组单元格的字体,但它们的内容显示为错误的字体(在单元格和公式框中)。
如果每项工作都只处理 Excel 文件,则问题不大,但是我有一个项目必须将此 Excel 文件导入数据库。我尝试了一个演示,它加载了带有很多字体错误的 Excel 文件。这些错误正是我在 Excel 窗口中看到的公式框中显示的错误。我不知道如何解决这个问题。问题是客户假设Excel文件是OK的,看起来是这样的(因为单元格的内容在单元格中显示OK,错误只是在公式框中)。我没有任何理由要求客户提供另一个 Excel 文件。
我正在使用 NPOI 读取 Excel 文件,我认为它读取单元格内容的方式与公式框读取的方式相同,我尝试在读取其字符串之前为每一行应用正确的字体,但它似乎不起作用. 您对此有什么想法吗,我只需要一些建议,不希望有一个完整或完美的解决方案(我知道这并不容易)?我的第一个想法是首先尝试在 Excel 窗口的公式框中以正确/正确的字体显示单元格的内容,然后尝试使用带有 NPOI(或另一个库)的代码来执行此操作,然后正常导入 Excel 文件,我希望有一个更简单的解决方案,可以在读取单元格时提取内容(使用正确的字体)。
你的建议对我解决这个问题很有帮助。谢谢!
==================================================== =========
更新示例 xls 文件xls 文件
c# - NPOI 分页符
我正在使用 NPOI 框架来生成 97/2003 Excel 工作簿。我需要每 44 行设置一个分页符,从框架下载中提供的示例中,执行此操作的代码是:
sheet.SetRowBreak(int 行)
我可以验证这些是设置行整数的集合,但是在打开文档并查看分页预览时,只有一个页面包含整个工作表。
下面的示例代码:
想法?
c# - C# 加载 xlsx 文件性能不佳
我有一个关于在 C# 中加载 Excel (Xlsx) 文件的问题。我已经使用 NPOI 2.0 实现了 Excel 加载,但性能非常糟糕(15 到 25 秒的加载时间,10000 行和 60 列(在 Win7 上运行 Intel(R) Core(TM) i5-3210M CPU @ 2.50GHz(4 CPU),~2.5GHz))。我认为这是因为 NPOI 2.0 仍处于测试阶段,所以我尝试了另一个名为 EPPlus 的库,它仍然需要大约相同的时间来加载 Excel 文件。
这是我使用 EPPlus 加载它的方式:
根据 dotTrace Profiler,大约 40% 的时间浪费在 get_Workbook 方法(通过访问“package.Workbook”属性调用)中,然后在 get_Item 和 get_Value 调用中浪费了另外 30%,然后在 AddCellValue 方法中浪费了 5% (这是我的数据模型),其余时间分散到各种方法调用中。
是我做错了什么,还是这种表现正常?
干杯
c# - 将未知类型的单元格值传递给 DataTable 循环中的重载方法
第一次使用严格的类型语言并遇到一些问题。
从 MySQL 适配器获取的数据填充一个 DataTable 对象。
列类型与 MySQL 表中的相同。
启动 NPOI,创建 xls 表。下一步是循环写入数据。这就是问题所在。
方法 SetCellValue 对所有需要的类型都有重载,但它可以自动猜测更合适的重载吗?我错过了什么吗?
将所有值转换为字符串无济于事,因为我需要在表格中进行数字格式化。
从技术上讲,这段代码有效,我正在寻找正确的处理方式。