ColdFusion - Формат книги POI Excel как число

Я создаю файл Excel с помощью ColdFusion и POI Workbook. Файл создан отлично, однако у меня есть ячейки, которые содержат числовые значения и должны храниться как числа для правильной работы SUM и других функций.

Я хочу вызвать код после того, как данные были добавлены для листа Excel, который в основном будет перебирать данные, и если значение является числовым, установите формат данных как числовой. Таким образом, когда я открываю файл Excel, я могу выполнить SUM или что-то еще в этом столбце данных.

Ниже приведено то, что я пробовал до сих пор, и это «работает», потому что все ячейки имеют цвет фона #EBEBEB, однако в них все еще есть предупреждение «Число сохранено как текст», как показано ниже. Как я могу это исправить?

// Create our dataFormat object
df = poiWorkbook.createDataFormat();
// Create our new style
formatNumber = poiWorkbook.createCellStyle();
formatNumber.setFillPattern( formatEvenRowRightAlignStyle.SOLID_FOREGROUND );
formatNumber.setAlignment( formatNumber.ALIGN_RIGHT );
XSSFColor = createObject("java", "org.apache.poi.xssf.usermodel.XSSFColor");
formatNumber.setFillForegroundColor( XSSFColor.init(Color.decode("##EBEBEB")) );    
formatNumber.setDataFormat(df.getFormat("0.00"));
// Loop over the data and apply the format
for (x=0;x<rowCount;x++) {
    for (y=0;y<colCount;y++) {
        poiSheet.getRow(x).getCell(y).setCellStyle(formatNumber);           
    }
}   

введите здесь описание изображения


person Phil    schedule 19.09.2016    source источник
comment
код вызова после добавления данных По какой причине? Это возможно, но было бы проще и менее подвержено ошибкам форматировать при заполнении листа.   -  person Leigh    schedule 19.09.2016
comment
@Leigh - причина в том, что я создаю запрос CF со всеми своими данными, а затем добавляю его с помощью метода SpreadsheetAddRows (лист, запрос).   -  person Phil    schedule 19.09.2016
comment
@Leigh - после того, как я добавлю все данные, я перебираю книгу и при необходимости применяю форматирование   -  person Phil    schedule 19.09.2016
comment
Если тип данных столбца запроса является числовым (не varchar или что-то в этом роде), вы должны иметь возможность вызывать SpreadsheetFormatColumn для этого столбца после добавления данных запроса.   -  person Leigh    schedule 19.09.2016
comment
... хотя это заставляет меня задуматься о типе данных вашего столбца. IIRC, более поздние версии CF должны обнаруживать числовые столбцы при использовании SpreadsheetAddRows и автоматически применять числовой формат. Возможно ли, что столбец форматируется как строка, а не числовой тип?   -  person Leigh    schedule 20.09.2016
comment
@Ли, спасибо за информацию. Вы правы, когда я вызываю SpreadsheetFormatColumn, он не работает, потому что мой исходный тип данных запроса - varchar. Я обновляю свой код, чтобы проверять столбцы перед их добавлением. Спасибо!!! Добавьте как ответ, пожалуйста, и я приму. Вы качаетесь на материале CF!!   -  person Phil    schedule 20.09.2016
comment
Спасибо :) Рад, что помогло.   -  person Leigh    schedule 24.09.2016


Ответы (1)


(Поднято из комментариев...)

код вызова после добавления данных

Любая причина, почему? Хотя это возможно, проще и менее подвержено ошибкам форматировать при заполнении листа. Предполагая, что тип данных столбца запроса является числовым (не varchar или что-то в этом роде), вы должны иметь возможность вызывать SpreadsheetFormatColumn для этого столбца после добавления данных запроса.

Сказав это, тот факт, что вы получаете предупреждения "Число, сохраненное как текст", в первую очередь заставляет меня задуматься о типе данных вашего столбца запроса. IIRC, более поздние версии CF должны обнаруживать числовые столбцы, когда SpreadsheetAddRows и применяет числовой формат к этим столбцам автоматически. Возможно ли, что ваш столбец запроса форматируется как строка, а не какой-либо числовой тип? Как это объяснило бы результаты. Решение состоит в том, чтобы привести столбец к числовому типу внутри запроса БД.

person Leigh    schedule 24.09.2016