我会尽我所能来解释我的问题,所以我很抱歉如果这篇文章的部分是令人困惑。我有两列数据,如下所示: -从java导出数据到excel
刚刚有6000多行。我想要做的是获取其rt值在2范围内的每个mz值之间的差异。因此,例如,使用此帖子上的图像,第2行(100.9035)中的mz值和第2行中的mz值6(102.9007)的RT值分别为8.07和7.36,即RT值相差在2以内。由此,我想从第二个减去第一个mz值的值来计算差异,然后将这些信息导出到excel中。我希望对所有在2秒范围内(不是+或 - 2)的mz值进行此过程。
为此,我首先将mz和rt值分隔成两个单独的文本文件,然后创建一个2d双精度数组,并从两个文件中填充数组(这可能是一个不必要的方法,但我的级别的脚本是非常简单的)。这样做之后,我通过使用if和for条件遍历数组来找到彼此相距2 rt内的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();
}
}
}
这可能是一个有点难以遵循这是很肮脏的脚本,但我只是想获得基本的工作。我注意到,当我试图做到这一点之前,我不断提出一个关于列范围的错误,因为我写的数据超出了电子表格允许的列范围,所以我试图设计一种方法,继续编写一旦数据超出列范围(通过在代码中使用计数器实现的255列),将数据转移到另一个表中,但我仍然收到错误消息。我知道java并不是执行此任务的最理想的工具,但它是我唯一具有一定经验的语言。有没有办法导出数据,以便我可以克服允许的列范围问题?
谢谢
真的没有想到这样做的那方式,虽然我不知道我将如何去在Excel中做它 – user2062207 2015-03-02 15:29:52
您是否超出了sheet1或sheet2上的列限制? – 2015-03-02 15:34:06
您是否考虑尝试使用.xslx来解决列限制问题? – Compass 2015-03-02 15:34:22