#java #excel #width #apache-poi
#java #excel #ширина #apache-poi
Вопрос:
Мне любопытно, почему не существует реализации для, Sheet.setColumnWidth
которая принимает Points
параметр.
Существует метод для установки высоты строки в точках, который является setHeightInPoints
Единственный доступный метод установки ширины — это принятие довольно странного масштаба, определенного как
width = Truncate([{Number of Visible Characters} * {Maximum Digit Width} {5 pixel padding}]/{Maximum Digit Width}*256)/256
Это означает, что это зависит от некоторой ширины цифры, поэтому значение, используемое в параметре, равно
всего 1/256 от того, что здесь требуется, некоторое прямое представление ширины. В самом Excel
вы также задаете ширину в точках.
Это означает, что поведение высоты строки и ширины столбца не является симметричным.
Есть ли какая-либо рациональная причина для использования только этой версии setColumnWidth
?
Это приводит к серьезным проблемам, так как лучшее, что я могу получить, дает разный результат на каждом компьютере, поскольку установленная ширина зависит от настроек шрифта пользователя по умолчанию.
Я полагаю, что это как-то связано с приятным отображением во многих различных настройках, как следует из комментария pnuts. Но это можно использовать только в очень узкой области.
На данный момент я считаю, что для этого нет простого обходного пути, и я не могу найти его прямо сейчас. (возможно, только тот, который подходит для моего случая)
Есть ли какой-нибудь хороший способ вычислить значение ширины столбца из желаемого значения в точках? Т.е. я хочу 120 точек на любом компьютере, который использует функциональность экспорта Excel. Какое значение width следует использовать в качестве параметра здесь, чтобы получить желаемую points
ширину?
Комментарии:
1. Действительно, это один из аспектов причины такого поведения. Но я считаю, что POI также мог бы обеспечить повсеместный
points
масштаб.2. Вы можете попросить Apache POI вычислить его для вас, основываясь на содержимом текущего столбца стилях — вы пробовали Sheet.autoSizeColumn(столбец int) ?
3.
autoSizeColumn
у меня не работает, потому что у меня заголовок twoline. Первая строка очень короткая, например «abc», а вторая строка очень длинная (некоторое объяснение). Не могу это изменить, потому что клиент явно хочет, чтобы это было именно так. Таким образом, в целом для этих двух строк нет подходящего размера.4. Знаете ли вы, на основе содержимого какой ячейки вы хотите, чтобы размер вашего столбца определялся?
5. На данный момент я знаю только, что первая строка состоит только из символов вида, а во второй строке будет много текста.