Warning: file_get_contents(/data/phpspider/zhask/data//catemap/9/java/346.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

Warning: file_get_contents(/data/phpspider/zhask/data//catemap/7/sqlite/3.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_Java_Excel_Apache Poi - Fatal编程技术网

从java将数据导出到excel

从java将数据导出到excel,java,excel,apache-poi,Java,Excel,Apache Poi,我会尽力解释我的问题,所以如果这篇文章的某些部分令人困惑,我道歉。我有两列数据如下所示: 有6000多排。我想做的是取rt值在2范围内的每个mz值之间的差值。因此,例如,使用这篇文章上的图像,第2行(100.9035)中的mz值和第6行(102.9007)中的mz值的RT值分别为8.07和7.36,即RT值之间的距离在2以内。由此,我想从第二个mz值中减去第一个mz值来计算差值,然后将此信息导出到excel中。我希望这一过程对2秒范围内的所有mz值(无论是+还是-2)都完成 为此,我首先将mz和

我会尽力解释我的问题,所以如果这篇文章的某些部分令人困惑,我道歉。我有两列数据如下所示:

有6000多排。我想做的是取rt值在2范围内的每个mz值之间的差值。因此,例如,使用这篇文章上的图像,第2行(100.9035)中的mz值和第6行(102.9007)中的mz值的RT值分别为8.07和7.36,即RT值之间的距离在2以内。由此,我想从第二个mz值中减去第一个mz值来计算差值,然后将此信息导出到excel中。我希望这一过程对2秒范围内的所有mz值(无论是+还是-2)都完成

为此,我首先将mz和rt值分离成两个单独的文本文件,然后创建一个2d双数组,并从这两个文件填充数组(这可能是一种不必要的方法,但我的脚本编写级别非常低)。这样做之后,我然后使用if和for条件遍历数组,以找到彼此相差在2rt以内的mz值,并获取它们之间的差值。这是迄今为止我用java编写的脚本:-

import java.io.BufferedReader;
import java.io.FileNotFoundException;
import java.io.FileOutputStream;
import java.io.FileReader;
import java.io.IOException;

import org.apache.poi.hssf.usermodel.HSSFWorkbook;
import org.apache.poi.hssf.usermodel.HSSFWorkbook;
import org.apache.poi.ss.usermodel.Cell;
import org.apache.poi.ss.usermodel.Row;
import org.apache.poi.ss.usermodel.Sheet;
import org.apache.poi.ss.usermodel.Workbook;

public class qexactiveDiff {

    public static void main(String[] args) throws IOException {

        Workbook wb = new HSSFWorkbook();
        Sheet sheet1 = wb.createSheet("Data");
        Sheet sheet2 = wb.createSheet("AdditionalData");


        double[][] mzValues = new double[6427][2];

        BufferedReader mzBr = new BufferedReader(new FileReader(
                "C:/Users/colles-a-l-kxc127/workspace/Maldi/src/Neg_mzs.txt"));

        BufferedReader rtBr = new BufferedReader(new FileReader(
                "C:/Users/colles-a-l-kxc127/workspace/Maldi/src/Neg_rts.txt"));

        String mzLine = mzBr.readLine();

        String rtLine = rtBr.readLine();

        for (int i = 0; i < 6427; i++) {

            if (mzValues != null || rtLine != null) {

                mzValues[i][0] = Double.parseDouble(mzLine);

                mzValues[i][1] = Double.parseDouble(rtLine);

                mzLine = mzBr.readLine();

                rtLine = rtBr.readLine();

            }

        }

        for (int i = 0; i < 6427; i++) {     //6427 is num of rows    


            Double rt = mzValues[i][1];
            Double mz = mzValues[i][0];

            Row row = sheet1.createRow(i);
            Row row2 = sheet2.createRow(i);
            Cell cell = row.createCell(0);
            Cell cell2 = row2.createCell(0);

            cell.setCellValue(mz);

        //  System.out.println("Mz: " + mz + " | " + "RT: " + rt);

            for (int j = 0; j < 6427; j++) {

                Double rt2 = mzValues[j][1];

                Double mz2 = mzValues[j][0];

                Double rtDiff = rt2 - rt;

                int counter = 0;

                if (rtDiff < 2 && rtDiff > -2) {

                    counter++;

                    if(counter < 255){

                        cell = row.createCell(j + 1);
                        cell.setCellValue(mz2 - mz);

                    }

                    else{

                        cell2 = row.createCell(j + 1);
                        cell2.setCellValue(mz2 - mz);

                    }

            //      System.out.println("Index: " + j + " Mz difference: "
            //              + (mz2 - mz) + " RT: " + rt2);

                }
            }

        }

        try {

            FileOutputStream output = new FileOutputStream("Data.xls");
            wb.write(output);
            output.close();

        } catch (Exception e) {

            e.printStackTrace();
        }

    }

}
导入java.io.BufferedReader;
导入java.io.FileNotFoundException;
导入java.io.FileOutputStream;
导入java.io.FileReader;
导入java.io.IOException;
导入org.apache.poi.hssf.usermodel.HSSFWorkbook;
导入org.apache.poi.hssf.usermodel.HSSFWorkbook;
导入org.apache.poi.ss.usermodel.Cell;
导入org.apache.poi.ss.usermodel.Row;
导入org.apache.poi.ss.usermodel.Sheet;
导入org.apache.poi.ss.usermodel.工作簿;
公共类qexactiveDiff{
公共静态void main(字符串[]args)引发IOException{
工作簿wb=新的HSSF工作簿();
Sheet sheet1=wb.createSheet(“数据”);
Sheet sheet2=wb.createSheet(“附加数据”);
double[]mzvalue=新的double[6427][2];
BufferedReader mzBr=新的BufferedReader(新文件读取器(
“C:/Users/colles-a-l-kxc127/workspace/Maldi/src/Neg_mzs.txt”);
BufferedReader rtBr=新BufferedReader(新文件读取器(
“C:/Users/colles-a-l-kxc127/workspace/Maldi/src/Neg_rts.txt”);
字符串mzLine=mzBr.readLine();
字符串rtLine=rtBr.readLine();
对于(int i=0;i<6427;i++){
if(mzvalue!=null | | rtLine!=null){
mzvalue[i][0]=Double.parseDouble(mzLine);
mzvalue[i][1]=Double.parseDouble(rtLine);
mzLine=mzBr.readLine();
rtLine=rtBr.readLine();
}
}
对于(inti=0;i<6427;i++){//6427是行数
双rt=mz值[i][1];
双mz=mz值[i][0];
Row Row=sheet1.创建行(i);
行row2=表2。创建行(i);
Cell Cell=row.createCell(0);
Cell cell2=row2.createCell(0);
cell.setCellValue(mz);
//System.out.println(“Mz:+Mz+”|“+”RT:+RT”);
对于(int j=0;j<6427;j++){
双rt2=mz值[j][1];
双mz2=mzvalue[j][0];
双rtDiff=rt2-rt;
int计数器=0;
if(rtDiff<2&&rtDiff>-2){
计数器++;
如果(计数器<255){
cell=row.createCell(j+1);
cell.setCellValue(mz2-mz);
}
否则{
cell2=row.createCell(j+1);
cell2.setCellValue(mz2-mz);
}
//System.out.println(“索引:+j+”Mz差:
//+(mz2-mz)+“RT:”+rt2);
}
}
}
试一试{
FileOutputStream输出=新的FileOutputStream(“Data.xls”);
写(输出);
output.close();
}捕获(例外e){
e、 printStackTrace();
}
}
}
这可能有点难以理解,因为它是一个相当肮脏的脚本,但我只是想让基本的工作。我注意到,当我尝试这样做之前,我不断地提出一个关于列范围的错误,因为我正在写入的数据超出了电子表格允许的列范围,因此我尝试设计一种方法,一旦数据超出列范围,就继续将数据写入另一张表(255列,我通过在代码中使用计数器实现),但我仍然收到错误消息。我知道java不是执行此任务的最理想工具,但它是我唯一有一点经验的语言。是否有一种方法可以导出数据,以克服允许的列范围问题


谢谢

我会先尝试将其保存为CSV文本文件,然后查看您总共有多少列--您可能已经突破了sheet2的限制,并且没有sheet3可以移动


或者,您也可以拥有任意多的行—将数据保存到行而不是列,将它们分成255个块,然后

没有真正想过这样做,尽管我不确定如何在Excel中实现这一点—您是否超过了sheet1或sheet2的列限制?您考虑过尝试使用.xslx吗列限制?我认为是sheet1,它没有说。如果我只是尝试将数据放在sheet1上,就会出现错误。我还尝试将输出保存为.xslx,但仍然会出现错误消息。我认为是apache poi通过HSSFOr生成的电子表格的列范围,或者,您可以使用任意多行--将数据保存到行而不是列中,将它们分成255个块,然后