- html - 出于某种原因,IE8 对我的 Sass 文件中继承的 html5 CSS 不友好?
- JMeter 在响应断言中使用 span 标签的问题
- html - 在 :hover and :active? 上具有不同效果的 CSS 动画
- html - 相对于居中的 html 内容固定的 CSS 重复背景?
import java.io.FileInputStream;
import java.io.IOException;
import java.text.SimpleDateFormat;
import java.util.ArrayList;
import java.net.*;
import java.util.List;
import com.google.common.base.Joiner;
import org.apache.poi.hssf.usermodel.HSSFCell;
import org.apache.poi.ss.usermodel.Cell;
import org.apache.poi.ss.usermodel.Row;
import org.apache.poi.xssf.usermodel.XSSFSheet;
import org.apache.poi.xssf.usermodel.XSSFWorkbook;
import org.apache.hadoop.fs.*;
import org.apache.hadoop.conf.*;
import static org.apache.poi.ss.usermodel.DateUtil.isCellDateFormatted;
public class XlsxToCsv {
private SimpleDateFormat dateFormat = new SimpleDateFormat("yyyy-MM-dd");
private XSSFSheet excelSheet;
private String outputFile;
private String defaultFS;
private List<String[]> arrayCSV = new ArrayList<>();
// Minumun amount of rows to expect
private int minRows = 5;
// Escape char for hive
private String escapeStr = "\\";
// Escape char for csv
private String separatorStr = ",";
public XlsxToCsv(String inputFile, String outputFile, String excelSheet, String defaultFS) throws IOException {
this.outputFile = outputFile;
this.defaultFS = defaultFS;
this.excelSheet = new XSSFWorkbook(new FileInputStream(inputFile)).getSheet(excelSheet);
}
public void setMinRows(int minRows) {
this.minRows = minRows;
}
public void setEscapeStr(String escapeStr) {
this.escapeStr = escapeStr;
}
public void setSeparatorStr(String separatorStr) {
this.separatorStr = separatorStr;
}
public List<String[]> getArrayCSV() {
return arrayCSV;
}
private void convertToCsv() {
Cell cell;
try {
for (Row row : excelSheet) {
int lastColumnNum = Math.max(row.getLastCellNum(), minRows);
String[] rowArray = new String[lastColumnNum];
for (int count = 0; count < lastColumnNum; count++) {
cell = row.getCell(count, Row.CREATE_NULL_AS_BLANK);
switch (cell.getCellType()) {
case HSSFCell.CELL_TYPE_FORMULA:
rowArray[count] = isCellDateFormatted(cell) ? dateFormat.format(cell.getDateCellValue()) : Double.toString(cell.getNumericCellValue());
break;
case Cell.CELL_TYPE_BOOLEAN:
rowArray[count] = Boolean.toString(cell.getBooleanCellValue());
break;
case Cell.CELL_TYPE_NUMERIC:
rowArray[count] = isCellDateFormatted(cell) ? dateFormat.format(cell.getDateCellValue()) : Double.toString(cell.getNumericCellValue());
break;
case Cell.CELL_TYPE_STRING:
rowArray[count] = cell.getStringCellValue().replace(separatorStr, escapeStr + separatorStr).replace("\n", " ");
break;
default:
rowArray[count] = "";
}
}
arrayCSV.add(rowArray);
}
} catch (Exception e) {
e.printStackTrace();
}
}
public void writeCsv() {
try {
FileSystem fs = FileSystem.get(new URI(defaultFS), new Configuration());
FSDataOutputStream outputStream = fs.create(new Path(outputFile));
Joiner joinEmpty = Joiner.on("").skipNulls();
Joiner joinComma = Joiner.on(separatorStr).skipNulls();
for (String[] i : arrayCSV) {
if (joinEmpty.join(i).length() > 0) {
outputStream.writeBytes(joinComma.join(i) + "\n");
}
}
outputStream.hflush();
outputStream.hsync();
outputStream.close();
} catch (Exception e) {
e.printStackTrace();
}
}
public static void main(String[] args) throws IOException {
String inputFile = args[0];
String outputFile = args[1];
String excelSheet = args[2];
String defaultFS = args[3];
XlsxToCsv processExcelFile = new XlsxToCsv(inputFile, outputFile, excelSheet, defaultFS);
processExcelFile.convertToCsv();
processExcelFile.writeCsv();
Joiner joinEmpty = Joiner.on("").skipNulls();
Joiner joinComma = Joiner.on(",").skipNulls();
for (String[] record : processExcelFile.getArrayCSV()) {
if (joinEmpty.join(record).length() > 0) {
System.out.print(joinComma.join(record));
System.out.print("\n");
}
}
}
}
将 xlsx 转换为 csv 时,我遇到以下错误消息:
Caused by: java.lang.OutOfMemoryError: Java heap space
at java.io.ByteArrayOutputStream.<init>(ByteArrayOutputStream.java:77)
at org.apache.poi.openxml4j.util.ZipInputStreamZipEntrySource$FakeZipEntry.<init>(ZipInputStreamZipEntrySource.java:123)
at org.apache.poi.openxml4j.util.ZipInputStreamZipEntrySource.<init>(ZipInputStreamZipEntrySource.java:57)
at org.apache.poi.openxml4j.opc.ZipPackage.<init>(ZipPackage.java:93)
at org.apache.poi.openxml4j.opc.OPCPackage.open(OPCPackage.java:278)
at org.apache.poi.util.PackageHelper.open(PackageHelper.java:37)
at org.apache.poi.xssf.usermodel.XSSFWorkbook.<init>(XSSFWorkbook.java:274)
at acvx.agg.qwuer.excel.XlsxToCsv.<init>(XlsxToCsv.java:43)
at acvx.agg.qwuer.excel.XlsxToCsv.main(XlsxToCsv.java:135)
最佳答案
一些建议:1)我怀疑您正在逐行读取Excel,但在某些行之后可能没有数据,并且您的程序中似乎没有对此进行检查!2)我建议尝试编辑它以仅运行 50 行,您会得到一个好主意,如果您的 excel 是 250 行,它可以转换该部分。3)如果您在上面获得成功,请尝试进入读取和写入循环,当前您正在将所有内容读取到数组,然后执行下一个写入所有内容的函数。只是建议打破这个,比如读 10 并写 10。确保在此之后将变量设置为空,以便它们可用于垃圾收集4) eclipse 大小的增加取决于您机器的总 RAM,您不能超出给定机器的某个点,所以我同意这可能不一定能解决您的问题。
关于Java.lang.OutOfMemoryError : JAVA HEAP SPACE while converting xlsx to csv format. 我尝试了这个没有运气 <java-opts>-Xms400m -Xmx4096m</java-opts>,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/59930426/
我系统上的docker info命令输出如下: # docker info Containers: 0 Images: 0 Storage Driver: devicemapper ..... D
我如何捕获用户按下 ctrl + space + space? 我用这段代码成功测试了ctrl + space: RegisterHotKey(0, 1, MOD_CONTROL, VK_SPACE)
我有一个 Matlab 图,我想在论文中使用。此图包含多个 cdfplots。现在的问题是我不能使用标记,因为在情节中变得非常密集。如果我想让样本稀疏,我必须从 cdfplot 中删除一些样本,这将导
我正在尝试获取我将用于备份的服务器上所有数据库的列表。以下是我尝试打印数据库列表但出现错误的代码片段。如何解决?添加双方括号并不能解决问题。 我已经研究了一些类似的问题,但我无法弄清楚。 grep:字
我了解 new gen/old gen/perm gen 之间的区别,但我不知道“To Space”和“From Space”是什么。我看到我的“From Space”使用率达到 99.8%,而“To
我当前有一个返回时看起来像这样的字符串: //This is the url string // the-great-debate---toilet-paper-over-or-under-the-r
我太亲密了。我正在尝试编写用于Notepad++的正则表达式表达式,以用空格替换破折号,而忽略已经用前置/后置空格代替的破折号。我知道我可以用“foobarfoo”搜索/替换“-”,然后搜索“-”替换
我的 ANTLR 代码如下: LPARENTHESIS : ('('); RPARENTHESIS : (')'); fragment CHARACTER : ('a'..'z'|'0'..'9'|)
在过去的 6 个小时里,我一直在尝试在我的 webgl 应用程序中实现点击,但我找不到任何关于这个主题的足够清晰的内容。 到目前为止,我想出的是伪代码: screenSpace = mousePosi
如何使用正则表达式来测试空格或制表符,但不测试换行符? 我尝试了 \s,但我发现它也测试换行符。 我使用C# (.NET) 和 WPF ,但这应该不重要。 最佳答案 使用字符类:[\t] 关于rege
我想解析以下内容: name:name 名称以字母开头和结尾,并且可以包含字母和空格的任意组合。它们也可以是空白的。我的规则是: identifier = alnum (space* alnum)*;
有什么办法可以让 Eden 空间按比例大于 Tenured 空间吗?有 NewRatio 但它以相反的方式工作(Tenured 比 Eden 大几倍)。 我知道有 -XX:NewSize= 和 -XX
我正在编写一个程序,让人们输入他们的信息(姓名,年龄......)。对于姓名输入,我不希望他们留空,只允许字母和空格,但不能以空格开头。合适的正则表达式是什么?我尝试使用: ^[a-zA-Z\\s]*
好的,我正在制作一个程序,它也可以制作垂直线、水平线和对角线!我对我的一个没有任何意义的输出感到困惑。 所以我的伪代码是这样的: //enter a char //enter a number
当我使用 scp 从服务器复制文件时, 我错误地使用了命令 scp xxx@xxxx:xx.zip . 当我完成后,我发现该文件的名称是 .我无法解压 这是目录列表。 http://pfil
我需要一个 bat 文件来获取 Windows 系统中 C:\驱动器的总空间和可用空间(以 GB(千兆字节)为单位),并创建一个包含详细信息的文本文件。 注意:我不想使用任何外部实用程序。 最佳答案
作为预处理我的数据的一部分。我希望能够替换空格后跟数字,同时保留空格后跟一个字符。例如: Input String: '8.1.7 Sep 2000 Dec 2004 Dec 2006 Indefin
我正在编写一个 XPath 表达式,但我修复了一个奇怪的错误,但是以下两个 XPath 表达式之间有什么区别? "//td[starts-with(normalize-space()),'Posted
在 C 中,当读取文本文件时,是否有可能接受一个未知大小的整数值(假设它适合 int),因为它在数字之前和数字之后都有一个空格。例如。 363 865我想分别存储 363 和 865,因为它们有自己的
在 sys/ptrace.h 中,我看到类似这样的内容: @define PT_READ_I 1 /* read world in child's I space*/ @define PT_READ
我是一名优秀的程序员,十分优秀!