Warning: file_get_contents(/data/phpspider/zhask/data//catemap/9/java/324.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文档(.csv)_Java_Excel_File_Csv_Package - Fatal编程技术网

使用Java创建和编辑Excel文档(.csv)

使用Java创建和编辑Excel文档(.csv),java,excel,file,csv,package,Java,Excel,File,Csv,Package,对于我正在进行的这个项目,我希望获取多个excel工作表,然后将它们合并为一个,按照我的意愿处理数据,使所有内容都更具可读性 打开文件、读取其内容、存储该内容、创建新文件(.csv)然后将信息粘贴到我选择的组织中的最佳方式是什么 我肯定需要坚持使用java,因为这将是一个预先存在的自动化过程的一部分,我不想将所有内容都更改为另一种语言 有没有我应该知道的有用的软件包 非常感谢 Justian据我所知,csv并不是excel特有的,而是一个“”文件 写CSV文件通常很简单,原因很明显。您可以编写自

对于我正在进行的这个项目,我希望获取多个excel工作表,然后将它们合并为一个,按照我的意愿处理数据,使所有内容都更具可读性

打开文件、读取其内容、存储该内容、创建新文件(.csv)然后将信息粘贴到我选择的组织中的最佳方式是什么

我肯定需要坚持使用java,因为这将是一个预先存在的自动化过程的一部分,我不想将所有内容都更改为另一种语言

有没有我应该知道的有用的软件包

非常感谢


Justian

据我所知,csv并不是excel特有的,而是一个“”文件


写CSV文件通常很简单,原因很明显。您可以编写自己的helper类来实现这一点。注意事项是确保您的任何输出中都没有delimeter

阅读CSV更为棘手。没有像Python中那样的标准库(一种做CSV处理的更好的语言,IMHO),但是如果你搜索它,有很多不错的免费实现

最大的问题是程序中的内部表示:根据输入和输出的大小,将所有内容保留在内存中可能是不可能的。你能一次做完所有事情吗?(我是说,读一些,写一些,等等)


您可能还希望使用稀疏表示而不是仅仅表示数组中的所有电子表格。

< P>我认为Excel中的任何严肃工作都应该考虑让Office为您在需要时远程调用的Windows机器上执行它的解决方案。但是,如果您的需求足够简单,或者您确实需要纯Java解决方案,Apache的库就足够了。

也许您应该试试这个: ,它是一个java电子表格组件,可以读取/写入/编辑所有xls/xlsx/csv文件。

试试这段代码

    import java.util.*;
    import java.util.Map.Entry;
    import java.util.concurrent.TimeoutException;
    import java.util.logging.Logger;
    import java.util.logging.Level;
    import java.util.logging.Logger;
    import org.apache.poi.ss.usermodel.*;
    import org.apache.poi.hssf.usermodel.HSSFWorkbook;
    import org.apache.poi.xssf.usermodel.XSSFWorkbookFactory;

    public class App {

        public void convertExcelToCSV(Sheet sheet, String sheetName) {
            StringBuffer data = new StringBuffer();
            try {
                FileOutputStream fos = new FileOutputStream("C:\\Users\\" + sheetName + ".csv");
                Cell cell;
                Row row;

                Iterator<Row> rowIterator = sheet.iterator();
                while (rowIterator.hasNext()) {
                    row = rowIterator.next();
                    Iterator<Cell> cellIterator = row.cellIterator();
                    while (cellIterator.hasNext()) {
                        cell = cellIterator.next();

                        CellType type = cell.getCellTypeEnum();
                        if (type == CellType.BOOLEAN) {
                            data.append(cell.getBooleanCellValue() + ",");
                        } else if (type == CellType.NUMERIC) {
                            data.append(cell.getNumericCellValue() + ",");
                        } else if (type == CellType.STRING) {
                            data.append(cell.getStringCellValue() + ",");
                        } else if (type == CellType.BLANK) {
                            data.append("" + ",");
                        } else {
                            data.append(cell + ",");
                        }
                    }
                    data.append('\n');
                }
                fos.write(data.toString().getBytes());
                fos.close();
            }
            catch (FileNotFoundException e)
            {
                e.printStackTrace();
            }
            catch (IOException e)
            {
                e.printStackTrace();
            }
        }

        public static void main(String [] args)
        {
            App app = new App();
            String path =  "C:\\Users\\myFile.xlsx";
            InputStream inp = null;
            try {
                inp = new FileInputStream(path);
                Workbook wb = WorkbookFactory.create(inp);

                for(int i=0;i<wb.getNumberOfSheets();i++) {
                    System.out.println(wb.getSheetAt(i).getSheetName());
                    app.convertExcelToCSV(wb.getSheetAt(i),wb.getSheetAt(i).getSheetName());
                }
            } catch (Exception ex) {
                System.out.println(ex.getMessage());
            } 
            finally {
                try {
                    inp.close();
                } catch (Exception ex) {
                    System.out.println(ex.getMessage());
                }
            }
        }
    }
import java.util.*;
导入java.util.Map.Entry;
导入java.util.concurrent.TimeoutException;
导入java.util.logging.Logger;
导入java.util.logging.Level;
导入java.util.logging.Logger;
导入org.apache.poi.ss.usermodel.*;
导入org.apache.poi.hssf.usermodel.HSSFWorkbook;
导入org.apache.poi.xssf.usermodel.XSSFWorkbookFactory;
公共类应用程序{
public void convertExcelToCSV(工作表、字符串工作表名称){
StringBuffer数据=新的StringBuffer();
试一试{
FileOutputStream fos=新的FileOutputStream(“C:\\Users\\”+sheetName+“.csv”);
细胞;
行行;
迭代器rowIterator=sheet.Iterator();
while(roweiterator.hasNext()){
行=行迭代器。下一步();
迭代器cellIterator=row.cellIterator();
while(cellIterator.hasNext()){
cell=cellIterator.next();
CellType=cell.getCellTypeEnum();
if(type==CellType.BOOLEAN){
data.append(cell.getBooleanCellValue()+“,”);
}else if(type==CellType.NUMERIC){
data.append(cell.getNumericCellValue()+“,”);
}else if(type==CellType.STRING){
data.append(cell.getStringCellValue()+“,”);
}else if(type==CellType.BLANK){
数据。追加(“+”,”);
}否则{
数据。追加(单元格+“,”);
}
}
data.append('\n');
}
fos.write(data.toString().getBytes());
fos.close();
}
catch(filenotfounde异常)
{
e、 printStackTrace();
}
捕获(IOE异常)
{
e、 printStackTrace();
}
}
公共静态void main(字符串[]args)
{
App App=新App();
String path=“C:\\Users\\myFile.xlsx”;
InputStream inp=null;
试一试{
inp=新文件inputstream(路径);
工作簿wb=WorkbookFactory.create(inp);

对于(int i=0;iExcel文件比CSV多得多。CSV到excel就像文本文件到Word。读一些,写一些绝对是我希望做的。只是,据我所知,编辑现有文件没有太大的灵活性,只是根据您选择的内容创建一个。您所说的“编辑”是什么意思现有文件?创建新文件时,即使是excel也会简单地替换该版本。通过适当的API或设计,您可以编写“复制”的文件一个文件,并在相关时引入更改,如基于事件的解析器。比方说,我不想保存程序中的所有数据。我会用起始行/值创建该文件,然后在需要添加时重新打开它。当然,我必须评估效率。存储更多数据与打开/写入。是的。这是真的。CSV并不特定于excel,但我想大多数人都会理解,如果我把它与一个普通程序联系起来会更好。这看起来很棒,尽管有点混乱。我正在研究它。谢谢,但这不是我想要的。这是一个用Java制作的电子表格程序。我需要一些可以用Java使用的东西。