Скопируйте HSSFCellStyle в XSSFCellStyle в NPOI.

Мой входной файл - .xls, откуда я должен читать данные, обрабатывать и записывать обратно в файл .xlsx вместе со стилями.

Таким образом, использование NPOI HSSF для чтения из .xls и NPOI XSSF для создания файла .xlsx. Я закончил с данными. Но мне нужно скопировать форматы ячеек из .xls и применить к выходному файлу.

Когда я пишу outputheaderStyle.CloneStyleFrom(inputheaderStyle);, возникает исключение, поскольку inputheaderStyle имеет тип HSSFCellStyle, а outputheaderStyle имеет тип XSSFCellStyle.

Можно клонировать только один XSSFCellStyle в другой, но не между HSSFCellStyle и XSSFCellStyle.

outputheaderStyle.CloneStyleFrom((XSSFCellStyle)inputheaderStyle);

выдает исключение

Невозможно привести объект типа «NPOI.HSSF.UserModel.HSSFCellStyle» к типу «NPOI.XSSF.UserModel.XSSFCellStyle»

Есть ли другой способ скопировать стиль?


person Sobhan    schedule 28.07.2016    source источник
comment
Я не уверен на 100%, но я думаю, что с помощью NPOI вы можете обрабатывать файлы xls и xslx. Похоже, вы перепутали двоих   -  person lordkain    schedule 28.07.2016
comment
Я знаю, что перепутал оба. Но его клиент требует, чтобы ввод всегда был в формате .xls, а вывод должен быть в формате .xlsx со всеми стилями.   -  person Sobhan    schedule 28.07.2016
comment
Ок, я неправильно прочитал вопрос. клиенты и там требования :)   -  person lordkain    schedule 28.07.2016


Ответы (1)


Что ж, стиль ячейки файла .xls — HSSFCellStyle, а для файла .xlsx — XSSFCellStyle. В настоящее время нет прямого способа преобразовать HSSFCellStyle в XSSFCellStyle в NPOI.

Я управлял своей программой, копируя по одному стилю по отдельности.

_xssfStyle .BorderLeft = _hssfStyle .BorderLeft;
_xssfStyle .BorderRight = _hssfStyle .BorderRight;
_xssfStyle .BorderTop = _hssfStyle .BorderTop;
_xssfStyle .BorderBottom = _hssfStyle .BorderBottom;
_xssfStyle .FillForegroundColor = NPOI.HSSF.Util.HSSFColor.Grey25Percent.Index;
_xssfStyle .FillPattern = NPOI.SS.UserModel.FillPattern.SolidForeground;
_xssfStyle .WrapText = _hssfStyle .WrapText;
_xssfStyle .VerticalAlignment = _hssfStyle .VerticalAlignment;
person Sobhan    schedule 28.10.2016