powered by simpleCommunicator - 2.0.61     © 2026 Programmizd 02
Целевая тема:
Создать новую тему:
Автор:
Закрыть
Цитировать
Форумы / Java [игнор отключен] [закрыт для гостей] / Отчет в Excel
12 сообщений из 12, страница 1 из 1
Отчет в Excel
    #39387340
Mari.P
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
необходимо сделать вывод таблицы в Excel.
Использую найденный в инете пример вывода с использованием Apache POI:

http://javatalks.ru/topics/42141?page=1#215078

Код: java
1.
2.
3.
4.
5.
6.
7.
8.
9.
10.
11.
12.
13.
14.
15.
16.
17.
18.
19.
20.
21.
22.
23.
24.
25.
26.
27.
28.
29.
30.
for (int i = 0; i < table.getModel().getRowCount(); i++) {
    			row = sheet.createRow(i + 1);
    			for (int j = 0; j < table.getModel().getColumnCount(); j++) {
    				String type = table.getModel().getColumnClass(j).getName();
    				cell = row.createCell(j);
    				if (table.getModel().getValueAt(i, j) != null) {
    					switch (type) {
    					case "java.lang.Integer":
    						cell.setCellValue(Integer.valueOf(table.getModel()
    								.getValueAt(i, j).toString()));
    						break;
    					case "java.lang.Float":
    						cell.setCellValue(Float.valueOf(table.getModel()
    								.getValueAt(i, j).toString()));
    						cell.setCellStyle(styleFloat);
    						break;
    					case "java.sql.Date":
    						cell.setCellValue(Date.valueOf(table.getModel()
    								.getValueAt(i, j).toString()));
    						cell.setCellStyle(styleDate);
    						break;
    					case "java.sql.Timestamp":
    						cell.setCellValue(Timestamp.valueOf(table.getModel()
    								.getValueAt(i, j).toString()));
    						cell.setCellStyle(styleTimestamp);
    						break;
    					default:
    						cell.setCellValue(table.getModel().getValueAt(i, j)
    								.toString());
    						break;



Все работает, но в результирующем файле не открывается правой кнопкой
меню "Формат ячейки" в ячейках с числами,
файл отчета в формате *.xls http://my-files.ru/ulpjc2
, и числа передаются как строки. Как исправить? Или может использовать другое средство для построения отчетов?
...
Рейтинг: 0 / 0
Отчет в Excel
    #39387346
Фотография Blazkowicz
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Mari.P не открывается правой кнопкойменю "Формат ячейки" в ячейках с числами,
Ну, может пора бы и офис изучить? У меня открываются.
...
Рейтинг: 0 / 0
Отчет в Excel
    #39387357
Mari.P
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Blazkowicz, спасибо, а какая у вас версия офиса? у меня 2007.
...
Рейтинг: 0 / 0
Отчет в Excel
    #39387380
Mari.P
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Blazkowicz, нет, не открывается, там где цифры, невозможно вызвать правой кнопкой мыши меню "Формат ячеек"
Попробовала и 2017 офисе и в 2010. Чтобы щелкнуть правой кнопкой сильно офис знать не надо...
...
Рейтинг: 0 / 0
Отчет в Excel
    #39387384
Фотография ОлегНорка
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Mari.P,

У меня то же не открывается, у меня 2007. Формат ячейки рядом с таблицей открывается, а если щелкать по ячейке в таблице не работает. Я в замешательстве...
...
Рейтинг: 0 / 0
Отчет в Excel
    #39387411
Фотография Blazkowicz
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Mari.P,

Покажите что ли скриншотом что вы имеете ввиду.
...
Рейтинг: 0 / 0
Отчет в Excel
    #39387453
sanBez
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Mari.P,

Код: java
1.
cell = row.createCell(j);


Ячейка создается нетипизованная.
java-doc посмотрите на
Cell createCell(int column);
Cell createCell(int column, int type);

Как вариант ать внутри switch в зависимости от case
Код: java
1.
2.
case "java.lang.Float":
cell = row.createCell(j, Cell.CELL_TYPE_NUMERIC);



Код: java
1.
2.
cell.setCellValue(Float.valueOf(table.getModel().getValueAt(i, j).toString()));
cell.setCellStyle(styleFloat);


Непонятно зачем toString()
Не видно что в styleFloat
...
Рейтинг: 0 / 0
Отчет в Excel
    #39387471
ivanra
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Гость
Возможно, поможет поменять везде местами cell.setCellValue и cell.setCellStyle. То есть, сначала создаем ячейку, задаем стиль, и только потом записываем.
...
Рейтинг: 0 / 0
Отчет в Excel
    #39387497
Partisan M
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
ivanraВозможно, поможет поменять везде местами cell.setCellValue и cell.setCellStyle. То есть, сначала создаем ячейку, задаем стиль, и только потом записываем.

Необязательно. Но забыто применить setCellType. Причём для поля с датой понадобится CELL_TYPE_NUMERIC, а для пустой клетки можно использовать CELL_TYPE_BLANK.
...
Рейтинг: 0 / 0
Отчет в Excel
    #39388099
Mari.P
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Спасибо большое за помощь.
Проблема в следующем -
Код: java
1.
String type = table.getModel().getColumnClass(j).getName();


Всегда возвращает Java.lang.Object ,
поэтому выполняется только ветка default
Код: java
1.
2.
default:  cell.setCellValue(table.getModel().getValueAt(i, j).toString());
    						break;



В jave таблица выглядит так (компонент JTable)
Заполняю ее так (записи берутся из БД MySQL, тк в БД разделитель разрядов ".", а в Windows настроена "," подменяю на ходу.
Код: java
1.
2.
3.
4.
5.
6.
7.
8.
9.
10.
11.
12.
13.
14.
15.
16.
17.
18.
19.
20.
21.
22.
23.
24.
25.
26.
27.
28.
29.
30.
31.
32.
33.
Vector<String> headerVect = new Vector<String>(); 
DefaultTableModel mod = new DefaultTableModel(headerVect, 0);
       
       table_a = new JTable();
       table_a.setModel(mod);
       able_a.getTableHeader().setFont(new Font("Courier New", Font.BOLD, 14));
       table_a.setFont(new Font("Courier New", Font.PLAIN, 16));
       table_a.setAutoResizeMode(JTable.AUTO_RESIZE_OFF);
       JTableHeader th = table_a.getTableHeader();
       int prefWidth;
         for(j=0;j<NumberDrawOfTable+1;j++)
          { prefWidth = Math.round((float) th.getFontMetrics(th.getFont()).getStringBounds(th.getTable().getColumnName(j),th.getGraphics()).getWidth());
            table_a.getColumnModel().getColumn(j).setPreferredWidth(prefWidth+10); 
          }
          
       
         i=0; 
         RowCount=0;
       while (rs.next())
       {
    	  Vector<String> newRow = new Vector<String>();
    	  newRow.add(rs.getTime(NumberDrawOfTable+1).toString()+" "+rs.getDate(NumberDrawOfTable+1).toString()); // время дата
    	  for(j=1;j<NumberDrawOfTable+1;j++)
    		  { 
    		    String tmpStr=new String(rs.getString(j));
    		    String replaceString=tmpStr.replace(".",",");
    		    newRow.add(replaceString); // значения в строку
	 		  }

             mod.addRow(newRow);
    	     i++;
    	     RowCount++;
       }// конец цикла по всем записям





Что я делаю не так?
...
Рейтинг: 0 / 0
Отчет в Excel
    #39388102
Фотография Blazkowicz
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Mari.P,

Очевидно что вы не задаёте тип колонок. Если хотите понять Swing то начните читать исходный код.
Или хотя бы туториалы:
http://docs.oracle.com/javase/tutorial/uiswing/components/table.html

Код: java
1.
2.
3.
public Class getColumnClass(int c) {
        return getValueAt(0, c).getClass();
}
...
Рейтинг: 0 / 0
Отчет в Excel
    #39389286
Mari.P
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Blazkowicz,
Да, спасибо, все получилось!
...
Рейтинг: 0 / 0
12 сообщений из 12, страница 1 из 1
Форумы / Java [игнор отключен] [закрыт для гостей] / Отчет в Excel
Найденые пользователи ...
Разблокировать пользователей ...
Читали форум (0):
Пользователи онлайн (0):
x
x
Закрыть


Просмотр
0 / 0
Close
Debug Console [Select Text]