Перейти к содержимому

Фотография

Apache poi - добавление новой страницы в существующий файл xlsx

java apache testing automated

  • Авторизуйтесь для ответа в теме
В теме одно сообщение

#1 Yoooo

Yoooo

    Новый участник

  • Members
  • Pip
  • 13 сообщений

Отправлено 18 августа 2019 - 19:42

Есть сценарий для тестирования страницы со списком товаров. 
В течении этого сценария данные с web страницы в виде двух списков List<String> с названием и ценой должны дважды передаваться в файл xlsx, каждый раз - на новый лист.
Проблема в том, что файл xlsx после второго вызова перезаписывается, то есть лист SmartsPopular исчезает, а вместо него появляется Smarts 3-6 K.

В чём здесь может быть ошибка?

 

public class Script

    @Test
    public void script3() throws IOException {
    openSmartphones();
    moreGoodsClick();
    moreGoodsClick();
 
    FileExcelCreating.main("SmartsPopular", goodsNamesListCreating, goodsPricesListCreating);
 
    moreGoodsClick();
    moreGoodsClick();
 
    FileExcelCreating.main("Smarts 3-6 K", goodsNamesListCreating, goodsPricesListCreating);
---------------------------------------------------------------------------------------------------------
public class FileExcelCreating
    public static void main(String sheetName, List<String> goodsNames, List<String> goodsPrices) throws IOException {
 
        Workbook wb = new XSSFWorkbook();
        Sheet sheet = wb.createSheet(sheetName);
 
        Row r0 = sheet.createRow(0);
        Cell c0 = r0.createCell(0);
        c0.setCellValue("Название");
        Cell c1 = r0.createCell(1);
        c1.setCellValue("Цена");
 
        Row a;
 
        List<Integer> goodsPricesInt = new ArrayList<>();
        for(String s : goodsPrices) goodsPricesInt.add(Integer.valueOf(s));
 

        for (int i = 0; i < goodsNames.size(); i++) {
            a = sheet.createRow(i+1);
            String name = goodsNames.get(i);
            a.createCell(0).setCellValue(name);
        }
 
        for (int j = 0; j < goodsPricesInt.size(); j++) {
            a = sheet.getRow(j+1);
            Integer price = goodsPricesInt.get(j);
            a.createCell(1).setCellValue(price);
        }
 
        sheet.setAutoFilter(CellRangeAddress.valueOf("A1:B" + (goodsPricesInt.size())));
 
        FileOutputStream outputStream = new FileOutputStream  ("/FilesTXT/Smartphones.xlsx");
 
        wb.write(outputStream);
        outputStream.close();
    }


  • 0

#2 BabyRoot

BabyRoot

    Специалист

  • Members
  • PipPipPipPipPip
  • 833 сообщений


Отправлено 19 августа 2019 - 08:17

Чтобы у вас открылся файл на добавление в него чего-либо, его надо открывать так:

        InputStream inp = null;
        try {
            inp = new FileInputStream("/FilesTXT/Smartphones.xlsx");
        } catch (FileNotFoundException ex) {
            ex.printStackTrace();
        }            

        Workbook wb = null;
        try {
            wb = WorkbookFactory.create(inp);
        } catch (InvalidFormatException | EncryptedDocumentException | IOException ex) {
            ex.printStackTrace();
        }
				
	Sheet sheet = wb.createSheet(sheetName);
		
		
	/// тут делаете что надо
		
				
	// и в конце самом не забываем закрыть InputStream
        try {
            inp.close();
        }catch (IOException e){
            e.printStackTrace();
        }	

Взято отсюда: https://poi.apache.o...adWriteWorkbook


  • 1



Темы с аналогичным тегами java, apache, testing, automated

Количество пользователей, читающих эту тему: 0

0 пользователей, 0 гостей, 0 анонимных