powered by simpleCommunicator - 2.0.61     © 2026 Programmizd 02
Целевая тема:
Создать новую тему:
Автор:
Закрыть
Цитировать
Форумы / Java [игнор отключен] [закрыт для гостей] / POI: определить количество строк в ячейке
10 сообщений из 10, страница 1 из 1
POI: определить количество строк в ячейке
    #38480072
silvan
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Гость
Добрый день.
в ексель документе есть сложная табличка.
после установки ширины столбца получается, что не весь текст видим т.к. не умещается в заданную ширину и идет перенос.
Вопрос как посчитать сколько строк текста будет в ячейке, чтобы задать необходимую высоту?
...
Рейтинг: 0 / 0
POI: определить количество строк в ячейке
    #38480083
Фотография Blazkowicz
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Через StaticFontMetrics вытащить информацию по шрифту и посчитать приминимо к текущему тексту.
...
Рейтинг: 0 / 0
POI: определить количество строк в ячейке
    #38480106
silvan
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Гость
idea говорит, он вне пакета не доступен.
...
Рейтинг: 0 / 0
POI: определить количество строк в ячейке
    #38480111
Фотография Blazkowicz
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
silvanidea говорит, он вне пакета не доступен.
Вот же жлобы. Надо поискать где он использется в POI. Может опосредовано получиться инфу вытащить.
...
Рейтинг: 0 / 0
POI: определить количество строк в ячейке
    #38480127
Фотография Blazkowicz
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Там собственно класс примитивный. Можно в проект скопипастить. Можно самому FontMetrics из того жа файла вычитать.
Можно вообще размеры FontMetrics захардкодить, если у вас в документах фиксированый шрифт.
...
Рейтинг: 0 / 0
POI: определить количество строк в ячейке
    #38480133
silvan
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Гость
мда.походу свою реализацию скопипастить быстрее..
...
Рейтинг: 0 / 0
POI: определить количество строк в ячейке
    #38480366
Leonid Kudryavtsev
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
silvan...Вопрос как посчитать сколько строк текста будет в ячейке, чтобы задать необходимую высоту?
А нафига ее задавать? Excel вроде же сам замечательно умеет ячейки по высоте вытягивать?

в Excel - формат ячеек, выравнивание, переносить по словам и наступает счастье. Насколько я помню POI, с ним работал лет 10 назад ))), там тоже никакая высота ячейки не требовалась (в то время).
...
Рейтинг: 0 / 0
POI: определить количество строк в ячейке
    #38481104
silvan
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Гость
Leonid Kudryavtsev,
текст то по словам переносит, только вот высота ячейки не меняется, поэтому не весь текст виден.

копипаст StaticFontMetrics потребовал копипаста еще одного класса(
так же решил попробовать awt.FontMetrics

и вот теперь не могу понять что за загадочные числа мне возвращаются!?

Код: java
1.
2.
3.
4.
5.
6.
7.
8.
9.
10.
11.
12.
13.
14.
15.
16.
17.
18.
19.
20.
21.
22.
23.
24.
25.
26.
                        CellStyle style;
                        if(cell != null){
                            style = cell.getCellStyle();
                        } else {
                            style =  Layouter.defaultCellStyle(wb);
                        }


                        short fontIdx = style.getFontIndex();
                        Font font = wb.getFontAt(fontIdx);


                        //cast workbook font to Java font
                        java.awt.Font javaFont = new java.awt.Font(font.getFontName(), java.awt.Font.PLAIN,
                        font.getFontHeightInPoints());

                        //get font metrics
                        FontMetrics fontMetrics = new Label().getFontMetrics(javaFont);
                        //get char width
                        int stringWidth1 = fontMetrics.stringWidth(cellValue);
                        int stringWidth2 = StaticFontMetrics.getFontDetails(javaFont).getStringWidth(cellValue);

                        double columnWidth = SheetUtil.getColumnWidth(sheet, col, true, firstTableRow, row-1);
                        logger.debug("stringWidth1 = " + stringWidth1 + "  stringWidth2 = "+ stringWidth2);

                        logger.debug("columnWidth : " + columnWidth);




StringCellValue = Составы из порожних вагонов в количестве 350-520 осей с одним локомотивом в голове, соединенные, повышенного веса, тяжеловесные
stringWidth1 = 479 stringWidth2 = 1240
columnWidth : 47.462890625



NumericCellValue = 3974.35
stringWidth1 = 26 stringWidth2 = 40
columnWidth : 15.570703125


в каких единицах измеряются все эти величины?
...
Рейтинг: 0 / 0
POI: определить количество строк в ячейке
    #38481865
Leonid Kudryavtsev
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
silvanLeonid Kudryavtsev,
текст то по словам переносит, только вот высота ячейки не меняется, поэтому не весь текст виден.

?????


Код: java
1.
2.
3.
4.
5.
6.
7.
8.
9.
10.
11.
12.
13.
14.
15.
16.
17.
18.
19.
20.
21.
22.
23.
24.
25.
26.
27.
28.
29.
30.
31.
32.
33.
34.
35.
36.
37.
38.
39.
40.
41.
42.
43.
44.
45.
46.
47.
48.
49.
50.
51.
52.
53.
54.
55.
56.
57.
58.
59.
60.
61.
62.
63.
64.
65.
66.
67.
68.
69.
70.
71.
72.
73.
74.
75.
76.
77.
78.
79.
80.
81.
82.
package client;

import java.io.File;
import java.io.FileNotFoundException;
import java.io.FileOutputStream;

import java.io.IOException;

import java.util.Date;
import java.util.HashMap;
import java.util.Map;
import java.util.Set;

import org.apache.poi.hssf.usermodel.HSSFSheet;
import org.apache.poi.hssf.usermodel.HSSFWorkbook;
import org.apache.poi.ss.usermodel.Cell;
import org.apache.poi.ss.usermodel.CellStyle;
import org.apache.poi.ss.usermodel.Row;

// I use the example at http://viralpatel.net/blogs/java-read-write-excel-file-apache-poi/
// to write this code
public class WriteExcel {
    public WriteExcel() {
        super();
    }
    public void run() {
        HSSFWorkbook workbook = new HSSFWorkbook();
        HSSFSheet sheet = workbook.createSheet("Sample sheet");
        
        Map<String, Object[]> data = new HashMap<String, Object[]>();
        data.put("1", new Object[] {"Emp No.", "Name", "Salary"});
        data.put("1", new Object[] {"There is a long text in the cell. I belive, it will be wraped correctly by Excel itself."});
        data.put("2", new Object[] {1d, "John", 1500000d});
        data.put("3", new Object[] {2d, "Sam", 800000d});
        data.put("4", new Object[] {3d, "Dean", 700000d});

        Set<String> keyset = data.keySet();
        int rownum = 0;
        for (String key : keyset) {
            Row row = sheet.createRow(rownum++);
            Object [] objArr = data.get(key);
            int cellnum = 0;
            for (Object obj : objArr) {
                Cell cell = row.createCell(cellnum++);
                if(obj instanceof Date)
                    cell.setCellValue((Date)obj);
                else if(obj instanceof Boolean)
                    cell.setCellValue((Boolean)obj);
                else if(obj instanceof String) {
                    // I use the FAQ at http://poi.apache.org/spreadsheet/quick-guide.html
                    // to write this code
                    String s;
                    s = (String)obj;
                    cell.setCellValue( s );
                    CellStyle  style;
                    CellStyle cs = workbook.createCellStyle();
                    cs.setWrapText(true);
                    cell.setCellStyle(cs);
                }
                else if(obj instanceof Double)
                    cell.setCellValue((Double)obj);
            }
        }
         
        try {
            FileOutputStream out =
                    new FileOutputStream(new File("C:\\new.xls"));
            workbook.write(out);
            out.close();
            System.out.println("Excel written successfully..");
             
        } catch (FileNotFoundException e) {
            e.printStackTrace();
        } catch (IOException e) {
            e.printStackTrace();
        }        
    }
    public final static void main(String[] argv) {
        WriteExcel we=new WriteExcel();
        we.run();
    }
}


...
Рейтинг: 0 / 0
POI: определить количество строк в ячейке
    #38481947
silvan
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Гость
Leonid Kudryavtsev,

на примитивах всегда все просто и прекрасно.
понатыкайте различных объедененных ячеек(как по вертикали, так и горизонтали) с различными шрифтами
...
Рейтинг: 0 / 0
10 сообщений из 10, страница 1 из 1
Форумы / Java [игнор отключен] [закрыт для гостей] / POI: определить количество строк в ячейке
Найденые пользователи ...
Разблокировать пользователей ...
Читали форум (0):
Пользователи онлайн (0):
x
x
Закрыть


Просмотр
0 / 0
Close
Debug Console [Select Text]