У меня возникают проблемы при попытке открыть файл XLS с помощью Apache POI. Я интегрирую HSSF в приложение для рельсов.
Мой код похож:
require "rjb"
Rjb::add_jar(File.expand_path('demo/poi-3.9/poi-3.9-20121203.jar'))
Rjb::add_jar(File.expand_path('demo/poi-3.9/commons-codec-1.7.jar'))
Black = Rjb::import 'org.apache.poi.hssf.util.HSSFColor$BLACK'
HSSFCell = Rjb::import 'org.apache.poi.hssf.usermodel.HSSFCell'
HSSFCellStyle = Rjb::import 'org.apache.poi.hssf.usermodel.HSSFCellStyle'
HSSFFont = Rjb::import 'org.apache.poi.hssf.usermodel.HSSFFont'
HSSFWorkbook = Rjb::import 'org.apache.poi.hssf.usermodel.HSSFWorkbook'
IOUtils = Rjb::import 'org.apache.poi.util.IOUtils'
JavaFont = Rjb::import 'java.awt.Font'
FileInputStream = Rjb::import 'java.io.FileInputStream'
FileOutputStream = Rjb::import 'java.io.FileOutputStream'
def self.export_xls (params)
file = "tmp/#{Time.now.to_formatted_s(:number)}_#{abc}.xls"
@book = HSSFWorkbook.new
@sheet1 = @book.createSheet l(:report_name)
@drawing = @sheet1.createDrawingPatriarch()
@number_of_column = 0
@number_of_column_to_merge = 10
black = Black.index
@styleTableTitle = @book.createCellStyle()
@styleTableTitle.setBorderBottom(HSSFCellStyle.BORDER_THIN)
@styleTableTitle.setBottomBorderColor(black)
out = FileOutputStream.new("#{Rails.root}/" + file)
@book.write(out)
out.close()
file
end
Бросок исключения:
RuntimeError (java.lang.ClassNotFoundException: org.apache.poi.hssf.util.HSSFColor$BLACK)
Импортированные jar-файлы (Apache POI):
poi-3.9-20121203
poi-3.7-20101029
commons-codec-1.7
Почему вы используете такие старые версии Apache POI? Почему вы пытаетесь использовать две разные старые версии одновременно? Что произойдет, если вы остановите это и получите только одну новую банку POI?
Исключение выбрасывается только в продакшене. JavaFont = Rjb :: import 'java.awt.Font' работает нормально.

Похоже, проблема со строкой JavaFont = Rjb :: import 'java.awt.Font', попробуйте закомментировать ее и посмотреть, сохраняется ли ошибка, если это не ваша проблема