Есть небольшой код на экспорт данных с Jtable в excel
public class ExcelOrders {
private static String getCellValue(JTable table, int x, int y) {
return table.getValueAt(x, y).toString();
}
public static void writeToExcel (JTable table, String folder) {
XSSFWorkbook wb = new XSSFWorkbook();
XSSFSheet ws = wb.createSheet();
TreeMap<String, Object[]> data = new TreeMap<>();
data.put("-1", new Object[]{table.getColumnName(0), table.getColumnName(1), table.getColumnName(2),
table.getColumnName(3), table.getColumnName(4), table.getColumnName(6), table.getColumnName(8),
table.getColumnName(9)});
for (int i = 0; i < table.getRowCount(); i++) {
data.put(Integer.toString(i), new Object[] {getCellValue(table, i, 0), getCellValue(table, i, 1),
getCellValue(table, i, 2), getCellValue(table, i, 3), getCellValue(table, i, 4),
getCellValue(table, i, 6), getCellValue(table, i, 8), getCellValue(table, i, 9)});
}
Set<String> ids = data.keySet();
XSSFRow row;
int rowId = 0;
for (String key: ids) {
row = ws.createRow(rowId++);
Object[] values = data.get(key);
int celId=0;
for (Object o: values) {
Cell cell = row.createCell(celId++);
cell.setCellValue(o.toString());
cell.setCellStyle(styleExcel.createHeadingStyle(wb));
}
}
try {
FileOutputStream fos = new FileOutputStream(new File(folder+"\\"+"Список рабочих.xlsx"));
wb.write(fos);
fos.close();
} catch (Exception Ex) {
Logger.getLogger(ExcelOrders.class.getName()).log(Level.SEVERE, null, Ex);
new errorDialog(null, new StringEntered(Ex.getMessage()).getStringEntered(100),
new StringEntered().toString(Ex.getStackTrace()), "Программная ошибка", JOptionPane.ERROR_MESSAGE);
}
}
}
Хочу применить свойства жирности и растягивание по содержимому ячейки к первой строке
Написан небольшой метод
public static CellStyle createHeadingStyle(XSSFWorkbook book) {
XSSFCellStyle style = book.createCellStyle();
XSSFFont fontHeader = book.createFont();
fontHeader.setBoldweight(HSSFFont.BOLDWEIGHT_BOLD);
style.setFont(fontHeader);
return style;
}
В данном методе шрифт становится жирным во всех ячейках Как мне допилить его чтобы свойство bold применялось к 1 строке и также расширялось по содержимому в ячейки
Расширение сделал. Как установить жирный шрифт только 1 строке?
Нет необходимости создавать новый стиль для каждой ячейки - создайте предварительно 2 стиля: для 1й строки и для всех остальных, и затем используйте их. Код для стилей:
public static CellStyle createBaseStyle(XSSFWorkbook book) {
XSSFCellStyle style = book.createCellStyle();
//необходимые настройки
return style;
}
public static CellStyle createHeadingStyle(XSSFWorkbook book) {
XSSFCellStyle style = book.createCellStyle();
XSSFFont fontHeader = book.createFont();
fontHeader.setBoldweight(HSSFFont.BOLDWEIGHT_BOLD);
style.setFont(fontHeader);
return style;
}
И измененный вариант заполнения таблицы:
Set<String> ids = data.keySet();
XSSFRow row;
CellStyle baseStyle = styleExcel.createBaseStyle(wb);
CellStyle headingStyle = styleExcel.createHeadingStyle(wb);
int rowId = 0;
for (String key : ids) {
row = ws.createRow(rowId);
Object[] values = data.get(key);
int celId = 0;
for (Object o : values) {
Cell cell = row.createCell(celId++);
cell.setCellValue(o.toString());
cell.setCellStyle(rowId == 0 ? headingStyle: baseStyle);
}
rowId++;
}
UPD для проверки типов значений
for (Object o : values) {
Cell cell = row.createCell(celId++);
if (o instanceof Double) {
cell.setCellValue((Double)o);
} else if (o instanceof Integer) {
cell.setCellValue((Integer)o);
}
// else if прочие типы - decimal и т.д.
else {
cell.setCellValue(o.toString());
}
cell.setCellStyle(rowId == 0 ? headingStyle: baseStyle);
}
Продвижение своими сайтами как стратегия роста и независимости