Почему Sheet.setColumnWidth не в точках? Есть ли обходной путь?

#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. На данный момент я знаю только, что первая строка состоит только из символов вида, а во второй строке будет много текста.