我正在使用Grails 2.4.4并尝试使用' apache poi'上传.xlsx文件。插件,但当文件大小约为8 MB时,我得到JAVA堆大小异常。
我的控制器具有以下操作和方法: -
def uploadForm() {
String fileName = "D:\\File.xlsx"
Map excelSheetMap = process(fileName)
}
Map process(String fileName) {
ExcelBuilder excelBuilder = new ExcelBuilder(fileName)
//Getting JAVA Heap Size exception here when I am trying to create an object
//of ExcelBuilder with the file
}
ExcelBuilder.groovy类文件看起来像这样
class ExcelBuilder {
Workbook workbook
ExcelBuilder(String fileName) {
new File(fileName).withInputStream { is ->
workbook = new XSSFWorkbook(is)
}
}
}
我也尝试过使用grails-excel-import插件,但是我得到了同样的例外。
有人可以建议如何在grails中导入大尺寸的Excel文件。提前谢谢。
答案 0 :(得分:0)
Poi的内存占用率很高。请参阅: http://poi.apache.org/spreadsheet/index.html
您可以尝试使用SXSSF。 SXSSF是XSSF的API兼容流式扩展,用于必须生成非常大的电子表格,并且堆空间有限。
答案 1 :(得分:0)
这个'XSSF API'的问题在于,当我为excel表创建了根对象(工作簿)时,堆空间在生成对象时已满,并且缺少用于构建工作簿对象的堆空间。因此,在增加堆大小后处理工作表的可能性较小,因为excel工作表可能要大得多。
<?php
//Start session
session_start();
//Check whether the session variable SESS_MEMBER_ID is present or not
if (!isset($_SESSION['id']) || ($_SESSION['id'] =='')) {
header("location: index.php");
exit();
}
$session_id=$_SESSION['id'];
$user_query = $conn->query("select * from members where member_id = '$session_id'");
$user_row = $user_query->fetch();
$name = $user_row['firstname']." ".$user_row['middlename']." ".$user_row['lastname'];
?>
因此,在一些R&amp; D之后,我发现了另外一个API来处理大型excel表,即“XSSF和SAX(事件API)”。但为此,您可以获取基础XML数据,并自行处理。
您可以在此处找到完整的文档 - https://poi.apache.org/spreadsheet/how-to.html
由于