WedX - журнал о программировании и компьютерных науках

Apache POI autoSizeColumn () работает неправильно

Я создаю программу, которая записывает информацию в файл excel, используя apache poi. После того, как я введу все свои данные в файл, я вызываю метод autoSizeColumn для каждого столбца файла. Но он изменяет размер столбцов до ширины последней введенной ячейки, которая иногда не такая большая, как другие ячейки в столбце. Я знаю, что использую его правильно, и, к сожалению, сейчас у меня нет Интернета, чтобы опубликовать какой-либо код, но я обновлю его, когда смогу.

Хорошо, надеюсь, я правильно использую теги кода, но вот он:

public void writeFile() {
    Workbook wb = new HSSFWorkbook();
    Sheet s = wb.createSheet();
    try {

        FileOutputStream out = new FileOutputStream(
                this.getSelectedFile());
        // create a new workbook

        // create a new sheet

        // declare a row object reference
        Row r = null;
        // declare a cell object reference
        Cell c = null;
        // in case of plain ascii
        wb.setSheetName(0, "Street Light Report");
        // create a sheet with 30 rows (0-29)
        // int rownum;
        // short rownum;
        // PrintWriter printOut = new PrintWriter(
        // this.getSelectedFile());
        String[] colName = { "Light Id", "Flagged",
                "Malfunction", "Comments", "Location", "Date" };
        // printOut.println("Light Id,Flagged,Malfunction,Comments,Location,Date");
        Connections.connect();
        String[][] data = Connections.searchForFlagged();
        for (int i = 0; i < data.length; i++) {
            r = s.createRow(i);
        }
        r.setRowNum(0);
        for (int j = 0; j < 6; j++) {
            c = r.createCell(j);
            switch (j) {
            case 0:
                c.setCellValue(colName[j]);
                break;
            case 1:
                c.setCellValue(colName[j]);
                break;
            case 2:
                c.setCellValue(colName[j]);
                break;
            case 3:
                c.setCellValue(colName[j]);
                break;
            case 4:
                c.setCellValue(colName[j]);
                break;
            case 5:
                c.setCellValue(colName[j]);
                break;

            }
        }

        for (int i = 0; i < data.length; i++) {

            r.setRowNum(i + 1);
            for (int j = 0; j < data[i].length; j++) {

                c = r.createCell(j);

                // System.out.println(data[i][j]);

                switch (j) {
                case 0:
                    c.setCellType(Cell.CELL_TYPE_NUMERIC);
                    c.setCellValue(Integer.parseInt(data[i][j]));
                    break;
                case 1:
                    if (data[i][j].equals("true"))
                        c.setCellValue("Yes");
                    else
                        c.setCellValue("No");
                    break;
                case 2:
                    if (data[i][j].equals("I"))
                        c.setCellValue("Intermittent");
                    else
                        c.setCellValue("Not Functional");
                    break;
                case 3:
                    c.setCellValue(data[i][j]);
                    break;
                case 4:
                    c.setCellValue(data[i][j]);
                    break;
                case 5:
                    c.setCellValue(data[i][j]);
                    break;
                }

            }
        }
                                wb.getSheetAt(0).setPrintGridlines(true);
        for (int j = 0; j < 6; j++) {
            s.autoSizeColumn(j);
        }
        wb.write(out);
        out.close();
    } catch (Exception ex) {

    }
};

Я бы разместил изображение здесь, но мне нужен представитель. точка, и я только начал здесь.

** Обратите внимание, что класс Connections является классом JDBC, поэтому java может извлекать информацию из базы данных mySQL, он возвращает двумерный массив строк **


  • Мы будем ждать ваш код. 01.04.2013
  • См. ответ на этот вопрос. 02.08.2013

Ответы:


1

Вам просто нужно перевести вызов на

sheet.autoSizeColumn(columnNumber);

в точку в вашем коде после того, как данные были добавлены.

Вот ссылка на API

Это единственный способ сделать это. У меня была такая же проблема, я вызывал метод autoSizeColumn() до того, как ввел данные. Хоп это помогло

01.04.2013
  • Метод autoSizeColumn() после того, как я ввожу все данные, и он работает, он просто автоматически подстраивается под ширину последней введенной ячейки. 01.04.2013
  • попробуйте разместить его после определенных столбцов и перед ячейками 01.04.2013
  • Извините за отсутствие опыта работы с POI, но вы не определяете столбцы, а только листы, строки и ячейки, верно? 01.04.2013
  • После того, как вы добавили все свои данные на лист, вы можете вызвать autoSizeColumn(columnNumber). Извините за плохое с колонками. Не работал с ним какое-то время 02.04.2013
  • О, хорошо, понял, но если вы посмотрите на код выше, это то, что я сделал правильно? 02.04.2013
  • @knowbody У меня также проблема с автоматическим размером, и он определенно помещается после ввода данных. 19.06.2013
  • Аналогичная проблема возникает и ставится после ввода данных. Кто-нибудь нашел какое-либо решение для этого? 04.11.2016

  • 2

    Обратите внимание, что если вы создаете большой отчет, s.autoSizeColumn(j); снизит производительность.

    02.07.2013
  • Это важно отметить, поскольку производительность значительно снижается! 20.07.2014

  • 3

    Переместите цикл for :

    for (int j = 0; j < 6; j++) {
                        s.autoSizeColumn(j);
                    }
    

    быть непосредственно перед тем, как вы напишете в книге и закроете свой объект.

    wb.write(out);
    
    01.04.2013
  • Хорошо, я переместил его, но результаты все те же. Не знаю, как разместить код в поле для комментариев, но я опубликую его вверху. 02.04.2013
  • Так что больше добавить нечего?? 02.04.2013
  • Новые материалы

    Как проанализировать работу вашего классификатора?
    Не всегда просто знать, какие показатели использовать С развитием глубокого обучения все больше и больше людей учатся обучать свой первый классификатор. Но как только вы закончите..

    Работа с цепями Маркова, часть 4 (Машинное обучение)
    Нелинейные цепи Маркова с агрегатором и их приложения (arXiv) Автор : Бар Лайт Аннотация: Изучаются свойства подкласса случайных процессов, называемых дискретными нелинейными цепями Маркова..

    Crazy Laravel Livewire упростил мне создание электронной коммерции (панель администратора и API) [Часть 3]
    Как вы сегодня, ребята? В этой части мы создадим CRUD для данных о продукте. Думаю, в этой части я не буду слишком много делиться теорией, но чаще буду делиться своим кодом. Потому что..

    Использование машинного обучения и Python для классификации 1000 сезонов новичков MLB Hitter
    Чему может научиться машина, глядя на сезоны новичков 1000 игроков MLB? Это то, что исследует это приложение. В этом процессе мы будем использовать неконтролируемое обучение, чтобы..

    Учебные заметки: создание моего первого пакета Node.js
    Это мои обучающие заметки, когда я научился создавать свой самый первый пакет Node.js, распространяемый через npm. Оглавление Глоссарий I. Новый пакет 1.1 советы по инициализации..

    Забудьте о Matplotlib: улучшите визуализацию данных с помощью умопомрачительных функций Seaborn!
    Примечание. Эта запись в блоге предполагает базовое знакомство с Python и концепциями анализа данных. Привет, энтузиасты данных! Добро пожаловать в мой блог, где я расскажу о невероятных..

    ИИ в аэрокосмической отрасли
    Каждый полет – это шаг вперед к великой мечте. Чтобы это происходило в их собственном темпе, необходима команда астронавтов для погони за космосом и команда технического обслуживания..


    Для любых предложений по сайту: [email protected]