Гость
Целевая тема:
Создать новую тему:
Автор:
Форумы / Java [игнор отключен] [закрыт для гостей] / Отчет в Excel / 12 сообщений из 12, страница 1 из 1
19.01.2017, 08:48
    #39387340
Mari.P
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Отчет в Excel
необходимо сделать вывод таблицы в 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
19.01.2017, 08:54
    #39387346
Blazkowicz
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Отчет в Excel
Mari.P не открывается правой кнопкойменю "Формат ячейки" в ячейках с числами,
Ну, может пора бы и офис изучить? У меня открываются.
...
Рейтинг: 0 / 0
19.01.2017, 09:20
    #39387357
Mari.P
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Отчет в Excel
Blazkowicz, спасибо, а какая у вас версия офиса? у меня 2007.
...
Рейтинг: 0 / 0
19.01.2017, 10:06
    #39387380
Mari.P
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Отчет в Excel
Blazkowicz, нет, не открывается, там где цифры, невозможно вызвать правой кнопкой мыши меню "Формат ячеек"
Попробовала и 2017 офисе и в 2010. Чтобы щелкнуть правой кнопкой сильно офис знать не надо...
...
Рейтинг: 0 / 0
19.01.2017, 10:09
    #39387384
ОлегНорка
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Отчет в Excel
Mari.P,

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

Покажите что ли скриншотом что вы имеете ввиду.
...
Рейтинг: 0 / 0
19.01.2017, 11:03
    #39387453
sanBez
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Отчет в Excel
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
19.01.2017, 11:17
    #39387471
ivanra
Гость
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Отчет в Excel
Возможно, поможет поменять везде местами cell.setCellValue и cell.setCellStyle. То есть, сначала создаем ячейку, задаем стиль, и только потом записываем.
...
Рейтинг: 0 / 0
19.01.2017, 11:43
    #39387497
Partisan M
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Отчет в Excel
ivanraВозможно, поможет поменять везде местами cell.setCellValue и cell.setCellStyle. То есть, сначала создаем ячейку, задаем стиль, и только потом записываем.

Необязательно. Но забыто применить setCellType. Причём для поля с датой понадобится CELL_TYPE_NUMERIC, а для пустой клетки можно использовать CELL_TYPE_BLANK.
...
Рейтинг: 0 / 0
20.01.2017, 08:06
    #39388099
Mari.P
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Отчет в Excel
Спасибо большое за помощь.
Проблема в следующем -
Код: 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
20.01.2017, 08:22
    #39388102
Blazkowicz
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Отчет в Excel
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
23.01.2017, 09:16
    #39389286
Mari.P
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Отчет в Excel
Blazkowicz,
Да, спасибо, все получилось!
...
Рейтинг: 0 / 0
Форумы / Java [игнор отключен] [закрыт для гостей] / Отчет в Excel / 12 сообщений из 12, страница 1 из 1
Найденые пользователи ...
Разблокировать пользователей ...
Читали форум (0):
Пользователи онлайн (0):
x
x
Закрыть


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