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

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

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

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

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

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

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

27
Эксперт Java
3639 / 2971 / 918
Регистрация: 05.07.2013
Сообщений: 14,220
07.01.2017, 19:38
Погугли poixmlproperties
0
 Аватар для hoz
1 / 1 / 0
Регистрация: 25.08.2014
Сообщений: 104
07.01.2017, 21:21  [ТС]
Цитата Сообщение от 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.CoreProp erties.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<j ava.util.Date>)
method org.apache.poi.POIXMLProperties.CoreProp erties.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
Оно тебе вроде человеческим языком пишет что аргумент не того типа
0
 Аватар для hoz
1 / 1 / 0
Регистрация: 25.08.2014
Сообщений: 104
07.01.2017, 22:08  [ТС]
То что он пишет я понимаю прекрасно, в плане перевода. Но не логично. Ведь на входе тип Nullable<java.util.Date>
Это рзве не date? Если нет, то просьба поправить меня. Уже запарился. Опыта в этом не много.
Я вижу, что похоже на arrayList параметр, но.. вроде бы и нет.
В общем, просьба направить меня в нужную сторону...
0
Эксперт Java
3639 / 2971 / 918
Регистрация: 05.07.2013
Сообщений: 14,220
07.01.2017, 22:25
Nullable и Date как бы разные типы, да.
0
 Аватар для hoz
1 / 1 / 0
Регистрация: 25.08.2014
Сообщений: 104
07.01.2017, 23:27  [ТС]
Можно пояснить как тогда в этом случае передать дату? Я не совсем понимаю, что передавать... Не встречался с подобным типом ещё.
0
Эксперт Java
3639 / 2971 / 918
Регистрация: 05.07.2013
Сообщений: 14,220
08.01.2017, 00:59
new Nullable<Date>(new Date()) ?
0
 Аватар для hoz
1 / 1 / 0
Регистрация: 25.08.2014
Сообщений: 104
08.01.2017, 01:13  [ТС]
И как его получить такой тип? Я в упор не нагугливаю толком ничего путного на эту тему. Есть что-то подобное, но конкретно ничего.
0
Эксперт Java
3639 / 2971 / 918
Регистрация: 05.07.2013
Сообщений: 14,220
08.01.2017, 01:51
Что значит "как получить"?
0
 Аватар для hoz
1 / 1 / 0
Регистрация: 25.08.2014
Сообщений: 104
08.01.2017, 02:35  [ТС]
Цитата Сообщение от 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
http://www.programcreek.com/ja... l.Nullable
1
 Аватар для hoz
1 / 1 / 0
Регистрация: 25.08.2014
Сообщений: 104
08.01.2017, 12:29  [ТС]
По сути, с типом 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());
    }
Вот логе один последний файл:
Code
1
2
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
Если ты делаешь getProperties, чтобы получить проепрти из файла, то, возможно, надо сделать setProperties, чтобы записать новые проперти в файл?
0
 Аватар для hoz
1 / 1 / 0
Регистрация: 25.08.2014
Сообщений: 104
08.01.2017, 13:05  [ТС]
Так сделал же:
Java
1
            coreProp.setLastPrinted(new Nullable<Date>(d));
0
Эксперт Java
3639 / 2971 / 918
Регистрация: 05.07.2013
Сообщений: 14,220
08.01.2017, 13:19
Ты поле в объекте меняешь. В файл кто это будет за тебя писать?
0
 Аватар для hoz
1 / 1 / 0
Регистрация: 25.08.2014
Сообщений: 104
08.01.2017, 13:39  [ТС]
Цитата Сообщение от xoraxax Посмотреть сообщение
Ты поле в объекте меняешь. В файл кто это будет за тебя писать?
У POIXMLDocument'а такого метода нет. У него вообще сеттеров нет. Как же это сделать тогда?
0
Эксперт Java
3639 / 2971 / 918
Регистрация: 05.07.2013
Сообщений: 14,220
08.01.2017, 13:54
тебе 5 лет чтоли? Все ответы гуглятся за минуту. Сам даешь ссылку на доки, в которых есть метод write.
0
 Аватар для hoz
1 / 1 / 0
Регистрация: 25.08.2014
Сообщений: 104
08.01.2017, 15:00  [ТС]
Неа. Не 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.j ar;C:\Program Files\Java\jdk1.8.0_112\jre\lib\ext\acce ss-bridge.jar;C:\Program Files\Java\jdk1.8.0_112\jre\lib\ext\cldr data.jar;C:\Program Files\Java\jdk1.8.0_112\jre\lib\ext\dnsn s.jar;C:\Program Files\Java\jdk1.8.0_112\jre\lib\ext\jacc ess.jar;C:\Program Files\Java\jdk1.8.0_112\jre\lib\ext\jfxr t.jar;C:\Program Files\Java\jdk1.8.0_112\jre\lib\ext\loca ledata.jar;C:\Program Files\Java\jdk1.8.0_112\jre\lib\ext\nash orn.jar;C:\Program Files\Java\jdk1.8.0_112\jre\lib\ext\sune c.jar;C:\Program Files\Java\jdk1.8.0_112\jre\lib\ext\sunj ce_provider.jar;C:\Program Files\Java\jdk1.8.0_112\jre\lib\ext\sunm scapi.jar;C:\Program Files\Java\jdk1.8.0_112\jre\lib\ext\sunp kcs11.jar;C:\Program Files\Java\jdk1.8.0_112\jre\lib\ext\zipf s.jar;C:\Program Files\Java\jdk1.8.0_112\jre\lib\javaws.j ar;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.j ar;C:\Program Files\Java\jdk1.8.0_112\jre\lib\jsse.jar ;C:\Program Files\Java\jdk1.8.0_112\jre\lib\manageme nt-agent.jar;C:\Program Files\Java\jdk1.8.0_112\jre\lib\plugin.j ar;C:\Program Files\Java\jdk1.8.0_112\jre\lib\resource s.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\Moved SelectedFiles\lib\commons-codec-1.9.jar;C:\Users\hoz\IdeaProjects\MovedS electedFiles\lib\poi-ooxml-3.13.jar;C:\Users\hoz\IdeaProjects\Moved SelectedFiles\lib\poi-ooxml-schemas-3.13.jar;C:\Users\hoz\IdeaProjects\Moved SelectedFiles\lib\xmlbeans-2.6.0.jar;C:\Users\hoz\IdeaProjects\Move dSelectedFiles\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.Ap pMain Main
Exception in thread "main" java.io.EOFException: Unexpected end of ZLIB input stream
at java.util.zip.InflaterInputStream.fill(I nflaterInputStream.java:240)
at java.util.zip.InflaterInputStream.read(I nflaterInputStream.java:158)
at java.util.zip.ZipInputStream.read(ZipInp utStream.java:194)
at org.apache.poi.openxml4j.util.ZipSecureF ile$ThresholdInputStream.read(ZipSecureF ile.java:168)
at java.io.FilterInputStream.read(FilterInp utStream.java:107)
at org.apache.poi.openxml4j.util.ZipInputSt reamZipEntrySource$FakeZipEntry.<init>(Z ipInputStreamZipEntrySource.java:130)
at org.apache.poi.openxml4j.util.ZipInputSt reamZipEntrySource.<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(P ackageHelper.java:37)
at org.apache.poi.xssf.usermodel.XSSFWorkbo ok.<init>(XSSFWorkbook.java:273)
at xcell.XLSXManipulation.readXLSXocument(X LSXManipulation.java:21)
at Main.main(Main.java:17)
at sun.reflect.NativeMethodAccessorImpl.inv oke0(Native Method)
at sun.reflect.NativeMethodAccessorImpl.inv oke(NativeMethodAccessorImpl.java:62)
at sun.reflect.DelegatingMethodAccessorImpl .invoke(DelegatingMethodAccessorImpl.jav a:43)
at java.lang.reflect.Method.invoke(Method.j ava:498)
at com.intellij.rt.execution.application.Ap pMain.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 минуты
Оно вроде как что-то делает, но пишет всё-равно, что:

Code
1
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
попробуй java обнови
0
Надоела реклама? Зарегистрируйтесь и она исчезнет полностью.
inter-admin
Эксперт
29715 / 6470 / 2152
Регистрация: 06.03.2009
Сообщений: 28,500
Блог
08.01.2017, 16:53
Помогаю со студенческими работами здесь

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

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

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

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

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


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

Или воспользуйтесь поиском по форуму:
20
Ответ Создать тему
Новые блоги и статьи
влияние грибов на сукцессию
anaschu 26.01.2026
Бифуркационные изменения массы гриба происходят тогда, когда мы уменьшаем массу компоста в 10 раз, а скорость прироста биомассы уменьшаем в три раза. Скорость прироста биомассы может уменьшаться за. . .
Воспроизведение звукового файла с помощью SDL3_mixer при касании экрана Android
8Observer8 26.01.2026
Содержание блога SDL3_mixer - это библиотека я для воспроизведения аудио. В отличие от инструкции по добавлению текста код по проигрыванию звука уже содержится в шаблоне примера. Нужно только. . .
Установка Android SDK, NDK, JDK, CMake и т.д.
8Observer8 25.01.2026
Содержание блога Перейдите по ссылке: https:/ / developer. android. com/ studio и в самом низу страницы кликните по архиву "commandlinetools-win-xxxxxx_latest. zip" Извлеките архив и вы увидите. . .
Вывод текста со шрифтом TTF на Android с помощью библиотеки SDL3_ttf
8Observer8 25.01.2026
Содержание блога Если у вас не установлены Android SDK, NDK, JDK, и т. д. то сделайте это по следующей инструкции: Установка Android SDK, NDK, JDK, CMake и т. д. Сборка примера Скачайте. . .
Использование SDL3-callbacks вместо функции main() на Android, Desktop и WebAssembly
8Observer8 24.01.2026
Содержание блога Если вы откроете примеры для начинающих на официальном репозитории SDL3 в папке: examples, то вы увидите, что все примеры используют следующие четыре обязательные функции, а. . .
моя боль
iceja 24.01.2026
Выложила интерполяцию кубическими сплайнами www. iceja. net REST сервисы временно не работают, только через Web. Написала за 56 рабочих часов этот сайт с нуля. При помощи perplexity. ai PRO , при. . .
Модель сукцессии микоризы
anaschu 24.01.2026
Решили писать научную статью с неким РОманом
http://iceja.net/ математические сервисы
iceja 20.01.2026
Обновила свой сайт http:/ / iceja. net/ , приделала Fast Fourier Transform экстраполяцию сигналов. Однако предсказывает далеко не каждый сигнал (см ограничения http:/ / iceja. net/ fourier/ docs ). Также. . .
КиберФорум - форум программистов, компьютерный форум, программирование
Powered by vBulletin
Copyright ©2000 - 2026, CyberForum.ru