在 POI 中复制 Excel 工作表
有谁知道使用 POI 将工作表从一个工作簿复制到另一个工作簿的方法吗? Workbook类有一个cloneSheet方法,但似乎无法将克隆工作表插入到新工作簿中?
如果没有 API 可以轻松完成此操作,是否有人拥有将所有数据(样式、列宽、数据等)从一张纸复制到另一张纸的代码?
jxls 有复制工作表的方法,但在工作簿之间复制时它们不起作用。
Does anyone know of a means to copy a worksheet from one workbook to another using POI? The Workbook class has a cloneSheet method, but there doesn't seem to be able to insert a cloned sheet into a new workbook?
If there isn't an API to do this easily, does anyone have the code to copy all of the data (styles, column widths, data, etc) from one sheet to another?
The jxls has methods to copy sheets, but they don't work when copying between workbooks.
如果你对这篇内容有疑问,欢迎到本站社区发帖提问 参与讨论,获取更多帮助,或者扫码二维码加入 Web 技术交流群。
绑定邮箱获取回复消息
由于您还没有绑定你的真实邮箱,如果其他用户或者作者回复了您的评论,将不能在第一时间通知您!
发布评论
评论(6)
我已经用 poi 实现了一些功能。 请参阅代码供您参考。
i have implemented some functionality with poi. please see the code for your reference.
我为 NPOI 创建了一个工作项: http://npoi.codeplex.com/WorkItem /View.aspx?WorkItemId=6057。
更新:该工作项在 NPOI 2.0 中实现。 您可以从 https://npoi.codeplex.com/releases/view/112932< 下载 NPOI 2.0 /a>
I created a workitem for NPOI: http://npoi.codeplex.com/WorkItem/View.aspx?WorkItemId=6057.
Update: The workitem is implemented in NPOI 2.0. You can download NPOI 2.0 from https://npoi.codeplex.com/releases/view/112932
这是我将工作表从一个工作簿复制到另一个工作簿的实现。 这个解决方案对我有用。 如果工作表没有表格等,则此代码将起作用。如果工作表包含简单文本(字符串、布尔值、整数等)、公式,则此解决方案将起作用。
如果您的要求是按原样复制整张纸而不留下任何内容,那么在这种情况下,消除过程比上面的代码效果更好并且更快,并且您不必担心丢失公式、绘图、表格、样式、字体等。
This is my implementation of copying sheets from one workbook to another. This solution works for me. This code will work if the sheets don't have tables, etc. If the sheets contain simple text (String, boolean, int etc), formulas, this solution will work.
If your requirement is to copy full sheets as is without leaving anything, the process of elimination works better in this case and faster than the above code and you don't have to worry about losing formulas, drawings, tables, styles, fonts, etc.
如果您使用的是 Java POI 库,最好的方法是将电子表格加载到内存中,然后创建一个新电子表格并写入要复制的每一条记录...这不是最好的方法,但可以完成复制功能。 ..
If you are using the Java POI library the best would be to load the Spreadsheet into memory,,, then create a new one and write each one of the records you want to copy... not the best way but acomplishes the copy function...
我花了大约一周的时间用 POI 来做这件事(使用 coderanch 上的最新代码) - 请注意,代码有缺陷(使用 TreeSet 存在问题,您需要用 HashMap 替换它),但即使在修复之后它会在公式上崩溃。
虽然有可能做到这一点,但必须依赖破解的代码是一个可怕的提议。
根据您的需求/预算,您可能需要考虑硬着头皮付费购买 aspose - http://www.aspose.com/doctest/java-components/aspose.cells-for-java/copy-move-worksheets- inside-and- Between-workbooks.html
它成功复制了工作表,包括格式、公式和内容。 保护规则。 我在 130 秒内完成了 300 张。 (300 x 90kb 工作簿,编译为一本 15mb 工作簿)。 该演示是免费的,它只是在工作簿中添加了一张附加表,提醒您购买许可证。
I put about a week of effort into doing this with POI (using the latest code on coderanch) - be warned that the code is flawed (there's an issue with using TreeSet where you need to replace that with a HashMap), but even after fixing that it crashes on formulas.
While it may be possible to do it's a scary proposition to have to rely on hacked up code.
Depending on your needs/budget you may want to consider biting the bullet and paying for aspose - http://www.aspose.com/doctest/java-components/aspose.cells-for-java/copy-move-worksheets-within-and-between-workbooks.html
It successfully copied sheets including formatting, formulas, & protection rules. I did 300 sheets in 130 seconds. (300 x 90kb workbooks, compiled into one 15mb workbook). The demo is free, it just puts an additional sheet into the workbook reminding you to buy a license.
最好的方法是打开文件并加载它。
如果您想要源 Excel 文件中的任何特定工作表,则只需删除与预期工作表不匹配的工作表即可。
试试这个:
这应该有助于澄清
The best way is to open the file and load it.
If you want any of the specific sheets from the source Excel file, then you just need to remove the sheet that does not match the intended Sheet.
try this:
This should help clarify