Форум программистов, компьютерный форум, киберфорум
Java
Войти
Регистрация
Восстановить пароль
Карта форума Темы раздела Блоги Сообщество Поиск Заказать работу  
 
 
Рейтинг 5.00/11: Рейтинг темы: голосов - 11, средняя оценка - 5.00
1 / 1 / 0
Регистрация: 25.08.2014
Сообщений: 104
1

Работа с атрибутами xlsx-файлов

07.01.2017, 17:21. Показов 2155. Ответов 27
Метки нет (Все метки)

Author24 — интернет-сервис помощи студентам
Нужно изменить атрибут "Автор", который видно в изображении, приложенном к посту.
Я нашёл класс SummaryInformation. Уже было обрадовался. На первый взгляд, там есть всё, что только может пригодится. Но рано я радовался. Оказалось, что он работает только с HSSF. По крайне мере, я сделал такой вывод для себя. Т.к. на экземпляре XSSF файла метод getSummaryInformation() вызвать не получилось.
Это вообще возможно на Java реализовать?
Миниатюры
Работа с атрибутами xlsx-файлов  
0
Programming
Эксперт
94731 / 64177 / 26122
Регистрация: 12.04.2006
Сообщений: 116,782
07.01.2017, 17:21
Ответы с готовыми решениями:

Работа с данными файлов Excel .xlsx.
Здравствуйте! А у меня тоже вопрос по теме, если позволите. При записи питоном каких либо данных в...

Работа с данными файлов Excel .xlsx. Чтение и вывод данных с использованием модуля openpyxl
Здравствуйте! Пытаюсь освоить работу чтения и записи данных в таблицы Excel, используя Python и его...

Вывод списка файлов с атрибутами
Нид хэлп, Разработать программу, которая проходит по всему дереву каталогов указанной ди-...

Ошибка при работе с атрибутами файлов
Работаю с атрибутами файлов. Вот сам код: var ar,sy,re,hi:string; begin if...

27
Эксперт Java
3639 / 2971 / 918
Регистрация: 05.07.2013
Сообщений: 14,220
07.01.2017, 19:38 2
Погугли poixmlproperties
0
1 / 1 / 0
Регистрация: 25.08.2014
Сообщений: 104
07.01.2017, 21:21  [ТС] 3
Цитата Сообщение от xoraxax Посмотреть сообщение
Погугли poixmlproperties
Оно то, вроде как, то что нужно. Но, что-то не вышло передать дату модификации в метод. Вот чт имеется:
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
package xcell;
 
import org.apache.poi.POIXMLProperties;
import org.apache.poi.openxml4j.exceptions.InvalidFormatException;
import org.apache.poi.xssf.usermodel.XSSFWorkbook;
 
import java.io.File;
import java.io.IOException;
import java.text.ParseException;
import java.text.SimpleDateFormat;
import java.util.Date;
 
public class POIXMLProps {
    public static void CoreProps(File file) throws IOException, InvalidFormatException {
        XSSFWorkbook wb = new XSSFWorkbook(file);
        POIXMLProperties xmlProps = wb.getProperties();
        POIXMLProperties.CoreProperties coreProp = xmlProps.getCoreProperties();
        System.out.println("before change Document Creator :" + coreProp.getLastPrinted());
        String string_date = "12.06.12";
        SimpleDateFormat f = new SimpleDateFormat("dd.MM.yyyy");
        try {
            Date d = f.parse(string_date);
            coreProp.setLastPrinted(d);
        } catch (ParseException e) {
            e.printStackTrace();
        }
        //coreProp.setLastPrinted("30.11.2005 0:33");
        //coreProp.setLastPrinted(milliseconds);
        System.out.println("before change Document Creator :" + coreProp.getLastPrinted());
    }
}
Хотя, в документации указано, что в параметры передаётся тип Date. Но у меня компилятор ругается в строке:
Java
1
            coreProp.setLastPrinted(d);
Что не так?
Выдаётся такая ошибка:
Кликните здесь для просмотра всего текста
Error27, 21) java: no suitable method found for setLastPrinted(java.util.Date)
method org.apache.poi.POIXMLProperties.CoreProperties.setLastPrinted(org.apache.poi.ope nxml4j.util.Nullable<java.util.Date>) is not applicable
(argument mismatch; java.util.Date cannot be converted to org.apache.poi.openxml4j.util.Nullable<java.util.Date>)
method org.apache.poi.POIXMLProperties.CoreProperties.setLastPrinted(java.lang.String) is not applicable
(argument mismatch; java.util.Date cannot be converted to java.lang.String)
0
Эксперт Java
3639 / 2971 / 918
Регистрация: 05.07.2013
Сообщений: 14,220
07.01.2017, 22:02 4
Оно тебе вроде человеческим языком пишет что аргумент не того типа
0
1 / 1 / 0
Регистрация: 25.08.2014
Сообщений: 104
07.01.2017, 22:08  [ТС] 5
То что он пишет я понимаю прекрасно, в плане перевода. Но не логично. Ведь на входе тип Nullable<java.util.Date>
Это рзве не date? Если нет, то просьба поправить меня. Уже запарился. Опыта в этом не много.
Я вижу, что похоже на arrayList параметр, но.. вроде бы и нет.
В общем, просьба направить меня в нужную сторону...
0
Эксперт Java
3639 / 2971 / 918
Регистрация: 05.07.2013
Сообщений: 14,220
07.01.2017, 22:25 6
Nullable и Date как бы разные типы, да.
0
1 / 1 / 0
Регистрация: 25.08.2014
Сообщений: 104
07.01.2017, 23:27  [ТС] 7
Можно пояснить как тогда в этом случае передать дату? Я не совсем понимаю, что передавать... Не встречался с подобным типом ещё.
0
Эксперт Java
3639 / 2971 / 918
Регистрация: 05.07.2013
Сообщений: 14,220
08.01.2017, 00:59 8
new Nullable<Date>(new Date()) ?
0
1 / 1 / 0
Регистрация: 25.08.2014
Сообщений: 104
08.01.2017, 01:13  [ТС] 9
И как его получить такой тип? Я в упор не нагугливаю толком ничего путного на эту тему. Есть что-то подобное, но конкретно ничего.
0
Эксперт Java
3639 / 2971 / 918
Регистрация: 05.07.2013
Сообщений: 14,220
08.01.2017, 01:51 10
Что значит "как получить"?
0
1 / 1 / 0
Регистрация: 25.08.2014
Сообщений: 104
08.01.2017, 02:35  [ТС] 11
Цитата Сообщение от xoraxax Посмотреть сообщение
Что значит "как получить"?
Есть, по сути, разные типы. Первый тип это апачевский Nullable<E>, а второй обычный Date().
Я думаю, как мне всё это совместить. Создаю Nullable<E>, а дальше у меня имеется дата уже обычного типа Date(). Мне нужно дату эту передать в экземпляр Nullable<E>. Как это сделать не представляю. Вот что имеется у меня, на данный момент:
Java
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
public class POIXMLProps {
    public static void CoreProps(File file) throws IOException, InvalidFormatException {
        Nullable<Date> dt = null;
        XSSFWorkbook wb = new XSSFWorkbook(file);
        POIXMLProperties xmlProps = wb.getProperties();
        POIXMLProperties.CoreProperties coreProp = xmlProps.getCoreProperties();
        System.out.println("before change Document Creator :" + coreProp.getLastPrinted());
        String string_date = "12.06.12";
        SimpleDateFormat f = new SimpleDateFormat("dd.MM.yyyy");
        try {
            Date d = f.parse(string_date);
            Date date = dt.getValue();
         //   coreProp.setLastPrinted(d);
        } catch (ParseException e) {
            e.printStackTrace();
        }
        //coreProp.setLastPrinted("30.11.2005 0:33");
        //coreProp.setLastPrinted(milliseconds);
        System.out.println("before change Document Creator :" + coreProp.getLastPrinted());
    }
}
0
Эксперт Java
3639 / 2971 / 918
Регистрация: 05.07.2013
Сообщений: 14,220
08.01.2017, 04:01 12
http://www.programcreek.com/ja... l.Nullable
1
1 / 1 / 0
Регистрация: 25.08.2014
Сообщений: 104
08.01.2017, 12:29  [ТС] 13
По сути, с типом Nullable теперь понятно. Передаю я его с заданным значением, но ничего не выходит. "Дата последнего вывода на печать" не изменяется. Хотя, я вывожу значения атрибута на консоль и в консоли вижу, что это значения типа изменяется. Но, по факту, ничего не происходит, что видно, если заглянуть в свойства файла. На видео я подробно и кратко показал, что происходит:



Вот код, который должен модифицировать "Дату последнего вывода на печать":

Java
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
    public static void CoreProps(File file) throws IOException, InvalidFormatException {
        Nullable<Date> dt = null;
        XSSFWorkbook wb = new XSSFWorkbook(file);
        POIXMLProperties xmlProps = wb.getProperties();
        POIXMLProperties.CoreProperties coreProp = xmlProps.getCoreProperties();
        System.out.println("before change Document Creator :" + coreProp.getLastPrinted());
        String string_date = "12.06.2002";
        SimpleDateFormat f = new SimpleDateFormat("dd.MM.yyyy");
        try {
            Date d = f.parse(string_date);
            coreProp.setLastPrinted(new Nullable<Date>(d));
         //   coreProp.setLastPrinted(d);
        } catch (ParseException e) {
            e.printStackTrace();
        }
        //coreProp.setLastPrinted("30.11.2005 0:33");
        //coreProp.setLastPrinted(milliseconds);
        System.out.println("after change Document Creator :" + coreProp.getLastPrinted());
    }
Вот логе один последний файл:
Код
before change Document Creator :null
after change Document Creator :Wed Jun 12 00:00:00 MSD 2002
По факту, это методы из класса Class POIXMLProperties.CoreProperties какие-то не рабочие. Что может быть причиной этому? Ведь всё написано корректно и дата корректная добавляется?
0
Эксперт Java
3639 / 2971 / 918
Регистрация: 05.07.2013
Сообщений: 14,220
08.01.2017, 12:45 14
Если ты делаешь getProperties, чтобы получить проепрти из файла, то, возможно, надо сделать setProperties, чтобы записать новые проперти в файл?
0
1 / 1 / 0
Регистрация: 25.08.2014
Сообщений: 104
08.01.2017, 13:05  [ТС] 15
Так сделал же:
Java
1
            coreProp.setLastPrinted(new Nullable<Date>(d));
0
Эксперт Java
3639 / 2971 / 918
Регистрация: 05.07.2013
Сообщений: 14,220
08.01.2017, 13:19 16
Ты поле в объекте меняешь. В файл кто это будет за тебя писать?
0
1 / 1 / 0
Регистрация: 25.08.2014
Сообщений: 104
08.01.2017, 13:39  [ТС] 17
Цитата Сообщение от xoraxax Посмотреть сообщение
Ты поле в объекте меняешь. В файл кто это будет за тебя писать?
У POIXMLDocument'а такого метода нет. У него вообще сеттеров нет. Как же это сделать тогда?
0
Эксперт Java
3639 / 2971 / 918
Регистрация: 05.07.2013
Сообщений: 14,220
08.01.2017, 13:54 18
тебе 5 лет чтоли? Все ответы гуглятся за минуту. Сам даешь ссылку на доки, в которых есть метод write.
0
1 / 1 / 0
Регистрация: 25.08.2014
Сообщений: 104
08.01.2017, 15:00  [ТС] 19
Неа. Не 5)) Но и опыта тоже не 5. По началу сложновато ориентироватся в дебрях иерархии классов..
Всё-равно, что-то не то. Я добавил строки:
Java
1
2
3
4
5
6
7
8
        try {
            System.out.println("file = " + file.toString());
            FileOutputStream fos = new FileOutputStream(file);
            wb.write(fos);
            fos.close();
        } catch (Exception e) {
            e.printStackTrace();
        }
Повалили ошибки:
Кликните здесь для просмотра всего текста
"C:\Program Files\Java\jdk1.8.0_112\bin\java" -Didea.launcher.port=7532 "-Didea.launcher.bin.path=C:\Program Files\JetBrains\IntelliJ IDEA 2016.2.4\bin" -Dfile.encoding=UTF-8 -classpath "C:\Program Files\Java\jdk1.8.0_112\jre\lib\charsets.jar;C:\Program Files\Java\jdk1.8.0_112\jre\lib\deploy.jar;C:\Program Files\Java\jdk1.8.0_112\jre\lib\ext\access-bridge.jar;C:\Program Files\Java\jdk1.8.0_112\jre\lib\ext\cldrdata.jar;C:\Program Files\Java\jdk1.8.0_112\jre\lib\ext\dnsns.jar;C:\Program Files\Java\jdk1.8.0_112\jre\lib\ext\jaccess.jar;C:\Program Files\Java\jdk1.8.0_112\jre\lib\ext\jfxrt.jar;C:\Program Files\Java\jdk1.8.0_112\jre\lib\ext\localedata.jar;C:\Program Files\Java\jdk1.8.0_112\jre\lib\ext\nashorn.jar;C:\Program Files\Java\jdk1.8.0_112\jre\lib\ext\sunec.jar;C:\Program Files\Java\jdk1.8.0_112\jre\lib\ext\sunjce_provider.jar;C:\Program Files\Java\jdk1.8.0_112\jre\lib\ext\sunmscapi.jar;C:\Program Files\Java\jdk1.8.0_112\jre\lib\ext\sunpkcs11.jar;C:\Program Files\Java\jdk1.8.0_112\jre\lib\ext\zipfs.jar;C:\Program Files\Java\jdk1.8.0_112\jre\lib\javaws.jar;C:\Program Files\Java\jdk1.8.0_112\jre\lib\jce.jar;C:\Program Files\Java\jdk1.8.0_112\jre\lib\jfr.jar;C:\Program Files\Java\jdk1.8.0_112\jre\lib\jfxswt.jar;C:\Program Files\Java\jdk1.8.0_112\jre\lib\jsse.jar;C:\Program Files\Java\jdk1.8.0_112\jre\lib\management-agent.jar;C:\Program Files\Java\jdk1.8.0_112\jre\lib\plugin.jar;C:\Program Files\Java\jdk1.8.0_112\jre\lib\resources.jar;C:\Program Files\Java\jdk1.8.0_112\jre\lib\rt.jar;C:\Users\hoz\IdeaProjects\MovedSelectedFi les\out\production\MovedSelectedFiles;C:\Users\hoz\IdeaProjects\MovedSelectedFil es\lib\poi-3.13.jar;C:\Users\hoz\IdeaProjects\MovedSelectedFiles\lib\commons-codec-1.9.jar;C:\Users\hoz\IdeaProjects\MovedSelectedFiles\lib\poi-ooxml-3.13.jar;C:\Users\hoz\IdeaProjects\MovedSelectedFiles\lib\poi-ooxml-schemas-3.13.jar;C:\Users\hoz\IdeaProjects\MovedSelectedFiles\lib\xmlbeans-2.6.0.jar;C:\Users\hoz\IdeaProjects\MovedSelectedFiles\lib\stax-api-1.0.1.jar;C:\Program Files\JetBrains\IntelliJ IDEA 2016.2.4\lib\idea_rt.jar" com.intellij.rt.execution.application.AppMain Main
Exception in thread "main" java.io.EOFException: Unexpected end of ZLIB input stream
at java.util.zip.InflaterInputStream.fill(InflaterInputStream.java:240)
at java.util.zip.InflaterInputStream.read(InflaterInputStream.java:158)
at java.util.zip.ZipInputStream.read(ZipInputStream.java:194)
at org.apache.poi.openxml4j.util.ZipSecureFile$ThresholdInputStream.read(ZipSecureF ile.java:168)
at java.io.FilterInputStream.read(FilterInputStream.java:107)
at org.apache.poi.openxml4j.util.ZipInputStreamZipEntrySource$FakeZipEntry.<init>(Z ipInputStreamZipEntrySource.java:130)
at org.apache.poi.openxml4j.util.ZipInputStreamZipEntrySource.<init>(ZipInputStream ZipEntrySource.java:57)
at org.apache.poi.openxml4j.opc.ZipPackage.<init>(ZipPackage.java:91)
at org.apache.poi.openxml4j.opc.OPCPackage.open(OPCPackage.java:273)
at org.apache.poi.util.PackageHelper.open(PackageHelper.java:37)
at org.apache.poi.xssf.usermodel.XSSFWorkbook.<init>(XSSFWorkbook.java:273)
at xcell.XLSXManipulation.readXLSXocument(XLSXManipulation.java:21)
at Main.main(Main.java:17)
at sun.reflect.NativeMethodAccessorImpl.invoke0(Native Method)
at sun.reflect.NativeMethodAccessorImpl.invoke(NativeMethodAccessorImpl.java:62)
at sun.reflect.DelegatingMethodAccessorImpl.invoke(DelegatingMethodAccessorImpl.jav a:43)
at java.lang.reflect.Method.invoke(Method.java:498)
at com.intellij.rt.execution.application.AppMain.main(AppMain.java:147)

Process finished with exit code 1


На данный момент, код целиком выглядит так:
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
package xcell;
 
import com.sun.istack.internal.NotNull;
import org.apache.poi.POIXMLProperties;
import org.apache.poi.openxml4j.exceptions.InvalidFormatException;
import org.apache.poi.openxml4j.util.Nullable;
import org.apache.poi.xssf.usermodel.XSSFWorkbook;
 
import java.io.File;
import java.io.FileOutputStream;
import java.io.IOException;
import java.text.ParseException;
import java.text.SimpleDateFormat;
import java.util.Date;
 
public class POIXMLProps {
    public static void CoreProps(File file) throws IOException, InvalidFormatException {
        Nullable<Date> dt = null;
        XSSFWorkbook wb = new XSSFWorkbook(file);
        POIXMLProperties xmlProps = wb.getProperties();
        POIXMLProperties.CoreProperties coreProp = xmlProps.getCoreProperties();
        System.out.println("before change Document Creator :" + coreProp.getLastPrinted());
        String string_date = "12.06.2002";
        SimpleDateFormat f = new SimpleDateFormat("dd.MM.yyyy");
        try {
            Date d = f.parse(string_date);
            coreProp.setLastPrinted(new Nullable<Date>(d));
            //wb.se
        } catch (ParseException e) {
            e.printStackTrace();
        }
        try {
            System.out.println("file = " + file.toString());
            FileOutputStream fos = new FileOutputStream(file);
            wb.write(fos);
            fos.close();
        } catch (Exception e) {
            e.printStackTrace();
        }
        //coreProp.setLastPrinted("30.11.2005 0:33");
        //coreProp.setLastPrinted(milliseconds);
        System.out.println("after change Document Creator :" + coreProp.getLastPrinted());
    }
}
Добавлено через 22 минуты
Оно вроде как что-то делает, но пишет всё-равно, что:

Код
Fail to save: an error occurs while saving the package : null
Этот пэкедж нужен обязательно? Я логики не понимаю, к чему тут какой-то пэкедж...
0
Эксперт Java
3639 / 2971 / 918
Регистрация: 05.07.2013
Сообщений: 14,220
08.01.2017, 16:53 20
попробуй java обнови
0
08.01.2017, 16:53
IT_Exp
Эксперт
87844 / 49110 / 22898
Регистрация: 17.06.2006
Сообщений: 92,604
08.01.2017, 16:53
Помогаю со студенческими работами здесь

Поиск и вывод имен файлов с определенными атрибутами в заданном каталоге
Здравствуйте! Дали задание: &quot;Поиск и вывод имен файлов с заданным(и) пользователем атрибутом(ами) в...

Работа с атрибутами файла в Windows
Добрый вечер, уважаемые программисты меня интересует библиотека win32 лучший способ работы с...

Использование типов DataContract с другими атрибутами. Прокси класс не генерирует DataContract с атрибутами
Такая проблема. Три дня провозился с сервисом, клиент которого по непонятной мне тогда причине...

Парсинг больших .xlsx файлов
Доброго времени суток! Подскажите как парсить большие xlsx файлы (4 столбца и &gt; 300к строк)....


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

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