Warning: file_get_contents(/data/phpspider/zhask/data//catemap/9/java/396.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
如何在Java中使用多线程同时读写同一张Excel工作表(HSSF/XSSF)_Java_Multithreading_Apache Poi_Coding Efficiency - Fatal编程技术网

如何在Java中使用多线程同时读写同一张Excel工作表(HSSF/XSSF)

如何在Java中使用多线程同时读写同一张Excel工作表(HSSF/XSSF),java,multithreading,apache-poi,coding-efficiency,Java,Multithreading,Apache Poi,Coding Efficiency,我需要阅读Excel表格,并用Java编写相同的表格。它可以很好地与单线程。因为它一条记录一条记录地处理,所以它成为一个耗时的过程。我想使用多线程一次处理多条记录 示例文件-file.xlsx 姓名和年龄从工作表中读出,应用一些逻辑并写入备注栏 假设我有1000条记录,我想分割500条记录,使用多线程同时处理 在上面的场景中,2个线程开始读取(名称和年龄列)和写入(备注列)到同一个Excel工作表 第一个线程应处理1到500, 第二个线程应处理501到1000 我怎样才能得到这个问题的最佳解决

我需要阅读Excel表格,并用Java编写相同的表格。它可以很好地与单线程。因为它一条记录一条记录地处理,所以它成为一个耗时的过程。我想使用多线程一次处理多条记录

示例文件-file.xlsx

姓名和年龄从工作表中读出,应用一些逻辑并写入备注栏

假设我有1000条记录,我想分割500条记录,使用多线程同时处理

在上面的场景中,2个线程开始读取(名称和年龄列)和写入(备注列)到同一个Excel工作表

第一个线程应处理1到500,
第二个线程应处理501到1000


我怎样才能得到这个问题的最佳解决方案?我正在使用POI jar处理Excel。

您所要求的不太可能可靠地工作。这可以归结为ApachePOI的线程安全属性。报告说:

“简言之:在不同线程中处理不同的文档对象将起作用。在多个线程中访问同一文档将不起作用。”

您希望使用多个线程同时读取和写入同一个电子表格。这就是FAQ所说的不安全的用例


我怎样才能得到这个问题的最佳解决方案

为了获得更快的解决方案,您需要在处理数据时使用其他数据表示形式(即,不是Excel电子表格):

  • 您可以让Excel将数据导出为CSV文件,处理该文件以创建新的CSV,然后将CSV重新导入电子表格
  • 你可以完全脱离电子表格;e、 g.使用数据库
或者,如果使用C#编写代码,则可以选择直接与Excel应用程序交互。有关一些想法,请参见以下问答


使用单线程完成的代码在哪里?你的尝试在哪里。坦率地说,对于一个非常具体的问题,您想做什么还不清楚。请详细说明您的建议。您可以让Excel将数据导出为CSV文件,处理该文件以创建新的CSV,然后将CSV重新导入电子表格。谢谢你的光临Advance@ArunPatil-不,我不能详细说明。我没有这样做过。我建议你用谷歌分别搜索这三个步骤。