17 / 17 / 16
Регистрация: 15.12.2012
Сообщений: 536
1

Экспорт таблицы в ексель

09.03.2016, 12:14. Показов 1243. Ответов 11
Метки нет (Все метки)

Author24 — интернет-сервис помощи студентам
написал вот такой код для экспорта таблицы в ексель
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
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
 try {
            JFileChooser fileChooser = new JFileChooser();
            int retval = fileChooser.showSaveDialog(jButton1);
            if (retval == JFileChooser.APPROVE_OPTION) {
                File file = fileChooser.getSelectedFile();
                if (file != null) {
                    if (!file.getName().toLowerCase().endsWith(".xls")) {
                        file = new File(file.getParentFile(), file.getName() + ".xls");
                    }
                    try {
                        ExcelExporter exp = new ExcelExporter();
                        if (jInternalFrame1.isSelected() == true) {
                            exp.exportTable(jTable1, file);
                            System.out.println("1");
                        } else if (jInternalFrame3.isSelected() == true) {
                            exp.exportTable(jTable3, file);
                            System.out.println("2");
                        } else if (jInternalFrame2.isSelected() == true) {
                            exp.exportTable(jTable2, file);
                            System.out.println("3");
                        } else if (jInternalFrame4.isSelected() == true) {
                            exp.exportTable(jTable4, file);
                            System.out.println("4");
                        } else if (jInternalFrame5.isSelected() == true) {
                            exp.exportTable(jTable5, file);
                            System.out.println("5");
                        } else if (jInternalFrame6.isSelected() == true) {
                            exp.exportTable(jTable1, file);
                            System.out.println("6");
                        } else if (jInternalFrame7.isSelected() == true) {
                            exp.exportTable(jTable7, file);
                            System.out.println("7");
                        }
                        jInternalFrame1.setSelected(false);
                        jInternalFrame2.setSelected(false);
                        jInternalFrame3.setSelected(false);
                        jInternalFrame4.setSelected(false);
                        jInternalFrame5.setSelected(false);
                        jInternalFrame6.setSelected(false);
                        jInternalFrame7.setSelected(false);
                    } catch (UnsupportedEncodingException e) {
                        e.printStackTrace();
 
                    } catch (FileNotFoundException e) {
                        e.printStackTrace();
                        System.out.println("not found");
                    } catch (IOException e) {
                        e.printStackTrace();
                    }
                }
            }
        } catch (Exception e) {
            e.printStackTrace();
        }
сам класс экспорта
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
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
package javaapplication120;
 
import java.awt.Font;
import java.io.*;
import javax.swing.table.TableModel;
import javax.swing.*;
import org.apache.poi.hssf.usermodel.HSSFWorkbook;
import org.apache.poi.hssf.util.CellRangeAddress;
import org.apache.poi.ss.usermodel.Cell;
import org.apache.poi.ss.usermodel.CellStyle;
import org.apache.poi.ss.usermodel.Row;
import org.apache.poi.ss.usermodel.Sheet;
import org.apache.poi.ss.usermodel.Workbook;
import org.apache.poi.ss.util.RegionUtil;
 
public class ExcelExporter {
 
    ExcelExporter() {
    }
 
    public void exportTable(JTable jTable1, File file) throws IOException {
        FileOutputStream out = null;
        Workbook wb = new HSSFWorkbook();
        Sheet sheet = wb.createSheet("new sheet");
        int colCount = jTable1.getColumnCount();
        int colRow = jTable1.getRowCount();
        Row row = null;
        Cell cell = null;
        TableModel model = jTable1.getModel();
        out = new FileOutputStream(file);
        CellStyle style = null;
        for (int j = 0; j < jTable1.getRowCount(); j++) {
            row = sheet.createRow(j);
            Font font = new Font("Verdana", Font.BOLD, 12);
            for (int i = 0; i < model.getColumnCount(); i++) {
                cell = row.createCell(i);
                cell.setCellValue((String) model.getColumnName(i));
            }
        }
        for (int i = 1; i < jTable1.getRowCount(); i++) {
            row = sheet.createRow(i);
            int f = jTable1.getColumnCount();
            System.out.println("f=" + f);
            for (int j = 0; j < jTable1.getColumnCount(); j++) {
                cell = row.createCell(j);
                cell.setCellValue((String) jTable1.getValueAt(i, j));
            }
        }
        for (int y = 0; y < colRow; y++) {
            for (int x = 0; x < colCount; x++) {
                CellRangeAddress range = new CellRangeAddress(y, y, x, x);
                RegionUtil.setBorderTop(CellStyle.BORDER_THIN, range, sheet, wb);
                RegionUtil.setBorderRight(CellStyle.BORDER_THIN, range, sheet, wb);
                RegionUtil.setBorderBottom(CellStyle.BORDER_THIN, range, sheet, wb);
                RegionUtil.setBorderLeft(CellStyle.BORDER_THIN, range, sheet, wb);
            }
        }
        for (int i = 0; i < colCount - 1; i++) {
            setBorder(colRow, colCount);
            sheet.autoSizeColumn(i);
        }
        wb.write(out);
        out.close();
    }
 
    private void setBorder(int i, int j) {
        Workbook wb = new HSSFWorkbook();
        Sheet sheet = wb.createSheet("new sheet");
        for (int y = 0; y <= i; y++) {
            for (int x = 0; x < j; x++) {
                CellRangeAddress range = new CellRangeAddress(y, y, x, x);
                RegionUtil.setBorderTop(CellStyle.BORDER_THIN, range, sheet,
                        wb);
                RegionUtil.setBorderRight(CellStyle.BORDER_THIN, range, sheet,
                        wb);
                RegionUtil.setBorderBottom(CellStyle.BORDER_THIN, range, sheet,
                        wb);
                RegionUtil.setBorderLeft(CellStyle.BORDER_THIN, range, sheet,
                        wb);
            }
        }
    }
}
все казалось бы хорошо но когда я начинаю экспортировать таблицу с многострочным заголовком, вылазит вот такая вот ошибка
XML
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
34
35
36
37
38
39
40
41
42
43
run:
java.lang.ClassCastException: java.math.BigDecimal cannot be cast to java.lang.String
    at javaapplication120.ExcelExporter.exportTable(ExcelExporter.java:47)
    at javaapplication120.DIpp.jButton16ActionPerformed(DIpp.java:2443)
    at javaapplication120.DIpp.access$2100(DIpp.java:41)
    at javaapplication120.DIpp$28.actionPerformed(DIpp.java:1039)
    at javax.swing.AbstractButton.fireActionPerformed(AbstractButton.java:2018)
    at javax.swing.AbstractButton$Handler.actionPerformed(AbstractButton.java:2341)
    at javax.swing.DefaultButtonModel.fireActionPerformed(DefaultButtonModel.java:402)
    at javax.swing.DefaultButtonModel.setPressed(DefaultButtonModel.java:259)
    at javax.swing.plaf.basic.BasicButtonListener.mouseReleased(BasicButtonListener.java:252)
    at java.awt.Component.processMouseEvent(Component.java:6505)
    at javax.swing.JComponent.processMouseEvent(JComponent.java:3321)
    at java.awt.Component.processEvent(Component.java:6270)
    at java.awt.Container.processEvent(Container.java:2229)
    at java.awt.Component.dispatchEventImpl(Component.java:4861)
    at java.awt.Container.dispatchEventImpl(Container.java:2287)
    at java.awt.Component.dispatchEvent(Component.java:4687)
    at java.awt.LightweightDispatcher.retargetMouseEvent(Container.java:4832)
    at java.awt.LightweightDispatcher.processMouseEvent(Container.java:4492)
    at java.awt.LightweightDispatcher.dispatchEvent(Container.java:4422)
    at java.awt.Container.dispatchEventImpl(Container.java:2273)
    at java.awt.Window.dispatchEventImpl(Window.java:2719)
    at java.awt.Component.dispatchEvent(Component.java:4687)
    at java.awt.EventQueue.dispatchEventImpl(EventQueue.java:729)
    at java.awt.EventQueue.access$200(EventQueue.java:103)
    at java.awt.EventQueue$3.run(EventQueue.java:688)
    at java.awt.EventQueue$3.run(EventQueue.java:686)
    at java.security.AccessController.doPrivileged(Native Method)
    at java.security.ProtectionDomain$1.doIntersectionPrivilege(ProtectionDomain.java:76)
    at java.security.ProtectionDomain$1.doIntersectionPrivilege(ProtectionDomain.java:87)
    at java.awt.EventQueue$4.run(EventQueue.java:702)
    at java.awt.EventQueue$4.run(EventQueue.java:700)
    at java.security.AccessController.doPrivileged(Native Method)
    at java.security.ProtectionDomain$1.doIntersectionPrivilege(ProtectionDomain.java:76)
    at java.awt.EventQueue.dispatchEvent(EventQueue.java:699)
    at java.awt.EventDispatchThread.pumpOneEventForFilters(EventDispatchThread.java:242)
    at java.awt.EventDispatchThread.pumpEventsForFilter(EventDispatchThread.java:161)
    at java.awt.EventDispatchThread.pumpEventsForHierarchy(EventDispatchThread.java:150)
    at java.awt.EventDispatchThread.pumpEvents(EventDispatchThread.java:146)
    at java.awt.EventDispatchThread.pumpEvents(EventDispatchThread.java:138)
    at java.awt.EventDispatchThread.run(EventDispatchThread.java:91)
СБОРКА УСПЕШНО ЗАВЕРШЕНА (общее время: 25 секунды)
код на многострочный заголовок таблицы брал отсюда http://www.java2s.com/Code/Jav... xample.htm
0
Programming
Эксперт
94731 / 64177 / 26122
Регистрация: 12.04.2006
Сообщений: 116,782
09.03.2016, 12:14
Ответы с готовыми решениями:

Экспорт в Ёксель
Доброго времени суток! Есть 'Экспортируем отфильтрованные данные в Ёксель Private Sub...

Экспорт данных в Ексель
Уважаемые спецы или просто продвинутые пользователи БД. Возможно ли из БД организовать заполнение...

Экспорт из Аксесс в Ексель тблЗапроса. с фильтром
Добрый день, уважаемые гуру Аксесс! Простая форма. Есть кнопка &quot;Мои проекты&quot;. - При нажатии...

Из DBGrid не выводит числа (экспорт в Ексель)
dbgrid1.DataSource.DataSet.First; Ex:=CreateOleObject('Excel.Application');...

11
Эксперт Java
2398 / 2223 / 565
Регистрация: 28.12.2010
Сообщений: 8,672
09.03.2016, 13:58 2
Цитата Сообщение от иван я Посмотреть сообщение
java.lang.ClassCastException: java.math.BigDecimal cannot be cast to java.lang.String
Цитата Сообщение от иван я Посмотреть сообщение
cell.setCellValue((String) model.getColumnName(i));
На буржуйском написанно же в чем и где проблема
0
17 / 17 / 16
Регистрация: 15.12.2012
Сообщений: 536
09.03.2016, 14:07  [ТС] 3
KEKCoGEN, это я понял, я не знаю как ее исправить. Помогите плиз
0
Эксперт Java
2398 / 2223 / 565
Регистрация: 28.12.2010
Сообщений: 8,672
09.03.2016, 14:42 4
иван я, говорят есть метод .toString() в классе Object от которого все остальные классы наследуют.
0
9 / 9 / 8
Регистрация: 10.01.2016
Сообщений: 68
09.03.2016, 14:42 5
Попробуй в 37-ой строчке в классе ExcelExporter

Java
1
cell.setCellValue(model.getColumnName(i).toString());
и в 46-ой

Java
1
cell.setCellValue(jTable1.getValueAt(i, j).toString());
1
17 / 17 / 16
Регистрация: 15.12.2012
Сообщений: 536
09.03.2016, 15:35  [ТС] 6
codeamateur, спасибо помогло.
0
17 / 17 / 16
Регистрация: 15.12.2012
Сообщений: 536
09.03.2016, 15:45  [ТС] 7
появилась еще одна проблема, в эксель не появляется полностью заголовок таблицы и исчезла одна строка из таблицы
Миниатюры
Экспорт таблицы в ексель   Экспорт таблицы в ексель  
0
9 / 9 / 8
Регистрация: 10.01.2016
Сообщений: 68
09.03.2016, 15:53 8
В классе ExcelExporter В 40-ой строчке

Java
1
for (int i = 0; i < jTable1.getRowCount(); i++) {
0
17 / 17 / 16
Регистрация: 15.12.2012
Сообщений: 536
09.03.2016, 16:15  [ТС] 9
codeamateur, строка появилась с заголовком беда

Добавлено через 36 секунд
заголовок не появляется должным образом
0
9 / 9 / 8
Регистрация: 10.01.2016
Сообщений: 68
09.03.2016, 16:26 10
Извините, дальше тоже не знаю
0
17 / 17 / 16
Регистрация: 15.12.2012
Сообщений: 536
09.03.2016, 16:37  [ТС] 11
codeamateur, и на этом спасибо большое
0
636 / 528 / 165
Регистрация: 01.04.2010
Сообщений: 1,843
10.03.2016, 00:33 12
Из примера по твоей ссылке
Java
1
new Object[]{"SNo.","1","2","Native","2","3"}
А это уже твоё.
Java
1
model.getColumnName(i)
Если не тупо копипастить код, но и пытаться его понять, то несложно будет догадаться, что ничего не теряется. Т.к. "верхний уровень" заголовков совсем не в модели находится, т.ч. заголовок в Excel тоже придётся рисовать руками.
0
10.03.2016, 00:33
IT_Exp
Эксперт
87844 / 49110 / 22898
Регистрация: 17.06.2006
Сообщений: 92,604
10.03.2016, 00:33
Помогаю со студенческими работами здесь

Экспорт запросов в ексель в разные листы
Честной народ, подскажите 1. как в 2010 аксе экспортировать несколько разных запросов в один файл...

Связь таблицы акцесс и ексель
таблица ексель импортирована в базу данных и названа Архив импорт , но теперь не работает связь...

Недопустимое имя для таблицы (листа ексель)
Всем добрый день! Может кто-нибудь знает, в чем дело? Запрос Select a.column1, a.column2 From...

Разные формулы для первой строки таблицы ексель и остальных
Привет! Есть таблица и для столбца задана формула. Эта формула автоматически распространяется на...


Искать еще темы с ответами

Или воспользуйтесь поиском по форуму:
12
Ответ Создать тему
Опции темы

КиберФорум - форум программистов, компьютерный форум, программирование
Powered by vBulletin
Copyright ©2000 - 2024, CyberForum.ru