Мне очень трудно, и я не знаю, как решить эту проблему. Моя проблема в том, что я перебираю множество файлов из папки. Для каждого файла я помещаю данные в список конкретных столбцов. Мне нужен вывод ниже в Excel с использованием Apache POI, но я могу сделать это при печати по строке, но не по столбцу. Может ли кто-нибудь помочь? По сути, я хочу, чтобы имя файла печаталось для каждого соответствующего списка, связанного с ним.
Вывод:
package cruft;
import java.io.File;
import java.io.FileOutputStream;
import java.io.IOException;
import java.util.Arrays;
import java.util.List;
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.xssf.streaming.SXSSFWorkbook;
import org.apache.poi.xssf.usermodel.XSSFSheet;
import org.apache.poi.xssf.usermodel.XSSFWorkbook;
public class Main {
private static String outPath = "path";
public static void main(String[] args) throws Exception{
SXSSFWorkbook wb = new SXSSFWorkbook();
Sheet sheet = wb.createSheet("Analysis.xlsx");
List fileList = Arrays.asList("Foo","Test");
List fooObjectData = Arrays.asList("Obj1","Obj2");
List fooFieldData = Arrays.asList("F1");
List fooAppData = Arrays.asList("App1","App2","App3","App4","App5");
List testObjectData = Arrays.asList("");
List testFieldData = Arrays.asList("F1","F2","F3","F4","F5");
List testAppData = Arrays.asList("App1");
for(String fileName: fileList) {
Row row = sheet.createRow(0);
for (int i = 0; i < 3; i++) {
Cell cell = row.createCell(i);
if(fileName.equals("Foo")) {
for(String s : fooObjectData) {
cell.setCellValue(s);
}
for(String s : fooFieldData) {
cell.setCellValue(s);
}
for(String s : fooAppData) {
cell.setCellValue(s);
}
}
else {
for(String s : testObjectData) {
cell.setCellValue(s);
}
for(String s : testFieldData) {
cell.setCellValue(s);
}
for(String s : testAppData) {
cell.setCellValue(s);
}
}
}
}
writeToFile(wb);
}
private static void writeToFile(SXSSFWorkbook wb) throws IOException {
File f = new File(outPath);
if (!f.exists()) {
f.createNewFile();
}
FileOutputStream out = new FileOutputStream("foo.xlsx");
wb.write(out);
out.close();
//After everything is written, then we dispose the temp file.
wb.dispose();
}
}
Когда я запускаю приведенную выше команду, он печатает только
App1 App1 App1
Я пытался запустить указанную выше команду, но результат ниже
Приложение1 Приложение1 Приложение1
Мне очень трудно, и я не знаю, как решить эту проблему. Моя проблема в том, что я перебираю множество файлов из папки. Для каждого файла я помещаю данные в список конкретных столбцов. Мне нужен вывод ниже в Excel с использованием Apache POI, но я могу сделать это при печати по строке, но не по столбцу. Может ли кто-нибудь помочь? По сути, я хочу, чтобы имя файла печаталось для каждого соответствующего списка, связанного с ним. Вывод: [code]FileName,ObjectData,FieldData,AppData Foo,"Obj1","F1","App1" Foo,"Obj2","","App2" Foo,"","","App3" Foo,"","","App4" Foo,"","","App5" Test,"","F1","App1" Test,"","F2","" Test,"","F3","" Test,"","F4","" [/code] [code]package cruft;
public class Main { private static String outPath = "path";
public static void main(String[] args) throws Exception{ SXSSFWorkbook wb = new SXSSFWorkbook(); Sheet sheet = wb.createSheet("Analysis.xlsx"); List fileList = Arrays.asList("Foo","Test"); List fooObjectData = Arrays.asList("Obj1","Obj2"); List fooFieldData = Arrays.asList("F1"); List fooAppData = Arrays.asList("App1","App2","App3","App4","App5");
List testObjectData = Arrays.asList(""); List testFieldData = Arrays.asList("F1","F2","F3","F4","F5"); List testAppData = Arrays.asList("App1"); for(String fileName: fileList) { Row row = sheet.createRow(0); for (int i = 0; i < 3; i++) { Cell cell = row.createCell(i); if(fileName.equals("Foo")) { for(String s : fooObjectData) { cell.setCellValue(s); } for(String s : fooFieldData) { cell.setCellValue(s); } for(String s : fooAppData) { cell.setCellValue(s); } } else { for(String s : testObjectData) { cell.setCellValue(s); } for(String s : testFieldData) { cell.setCellValue(s); } for(String s : testAppData) { cell.setCellValue(s); } }
} } writeToFile(wb); }
private static void writeToFile(SXSSFWorkbook wb) throws IOException { File f = new File(outPath); if (!f.exists()) { f.createNewFile(); } FileOutputStream out = new FileOutputStream("foo.xlsx"); wb.write(out); out.close();
//After everything is written, then we dispose the temp file. wb.dispose(); }
} [/code] Когда я запускаю приведенную выше команду, он печатает только App1 App1 App1 Я пытался запустить указанную выше команду, но результат ниже Приложение1 Приложение1 Приложение1