Страницы

Поиск по вопросам

Показаны сообщения с ярлыком docx. Показать все сообщения
Показаны сообщения с ярлыком docx. Показать все сообщения

суббота, 11 января 2020 г.

Копирование химических формул из .docx

#python #docx


Как с помощью библиотеки python-docx извлечь химическую формулу из текста ячейки
таблицы и перенести ее в другую таблицу?

Если копировать, как текст, то нет разницы между цифрой в верхнем, нижнем или обычном
регистре

Пример таблицы

    


Ответы

Ответ 1



В версии 0.8.6 python-docx этот функционал отсутствует, даже нужного пространства имен нет и нигде нет упоминания нужных тегов, то есть нет ни единого упоминания возможности работы с математическими элементами. Формулы из Word, например, в сыром виде выглядят как-то так. Исходная формула: ex=sin(x) docx: e x =isin(x) То есть вы можете попробовать спуститься в самый адок и обращаться с docx, как с набором XML документов. И вам необходимо найти в параграфе, в ячейке, где хотите нужный тег и потом вставить также в новый параграф, ячейку, куда хотите. Вот такой вот примерчик приведу. Он копирует формулу из одного документа, в пустой другой документ. В исходном документе нет ничего, кроме этой формулы. Однако, я бы уверенно себя не чувствовал на этом пути, даже если простой пример и работает. Также вместо тупого итерирования вы можете отыскать нужный элемент с тегом в пространстве {"m": xmlns:m="http://schemas.openxmlformats.org/officeDocument/2006/math"}. Итак: import docx d = docx.Document("formula_test.docx") new_doc = docx.Document() new_para = new_doc.add_paragraph() new_para_elem = new_para._element para_with_formula = d.paragraphs[0] # Это уже объект типа CT_P, родителем которого является lxml.Element elem = para_with_formula._element # Пространство имен `m` xmlns:m="http://schemas.openxmlformats.org/officeDocument/2006/math" tmp_ns = {"m": "http://schemas.openxmlformats.org/officeDocument/2006/math"} math_tag_with_namespace = "{" + tmp_ns["m"] + "}oMathPara" for i in elem.getiterator(): if i.tag == math_tag_with_namespace: print("OH! A formula!") new_para_elem.append(i) new_doc.save("NEW_DOC.docx") Как результат - в новом документе исходная формула.

суббота, 4 января 2020 г.

Открытие doc, docx, odf, xlsx файла в терминале linux

#кодировка #doc #docx #терминал


Вопрос заключается в следующем: "Существует ли такие программы, позволяющие открыть
doc, docx, odf файлы в терминале linux?".
Понимаю, что теоретически это не возможно, в силу отсутствие возможности программной
смены шрифта в терминале. Но! Что если, мне нужно, к примеру, тупо прочитать текст
из файла, а под рукой нету десктопной машины? Или можно такой вариант: программа преобразовывает
doc, docx, odf файл в tex-файл.
P.S.: я так полагаю, что этот вариант открытия подобных файлов будет еще и экономнее
десктопного относительно памяти.

С xlsx и подобными этому файлами тоже такой же вопрос встревает. Папа как-то рассказывал
просто, что когда еще не было десктопных осей и граф оболочек, они использовали вместо
doc-ов какую-то dos-овскую консольную прогу, и какие-то таблицы вместо excel-ей.
Буду благодарен за ответ.

UPD: Вопрос закрыт
    


Ответы

Ответ 1



Когда не было графических оболочек, тогда и и форматы были другие. Чем-то отчасти похожие на современный markdown Файлы же конечно можно прочитать. Но именно прочитать - предварительно конвертировав в текстовый формат. Так Excel файлы можно перевести в CSV - а дальше смотри хоть в less, хоть awk или sed дальше преобразуй. Файл Word конвертируются в обычный TXT - только текст и никакого форматирования. Можно и в RTF - тут оформление сохранится, но чтобы их читать нужен определенный навык :) А с практической точки зрения задача довольно актуальная. Постоянно приходится решать задачи типа "У нас есть прайс-лист в Excel - мы хотим его автоматически загружать на сайта в базу данных". Соответственно помимо утилит консоли есть и куча библиотек под разные языки программирования - позволяющих открыть, прочитать, изменить и сохранить файлы этих форматов без взякого GUI.

Ответ 2



для просмотра doc можно использовать catdoc, antiword и множество аналогичных программ. для просмотра docx можно использовать, например, docx2txt. для просмотра odf/odt можно использовать, например, odt2txt. для просмотра xlsx можно использовать, например, xlsx2csv. все перечисленные программы имеются в одноимённых пакетах в репозитории дистрибутива debian операционной системы gnu/linux. наверняка они есть в уже собранном виде и в репозиториях других популярных дистрибутивов. в крайнем случае можно скомпилировать — п.о. свободное, исходники общедоступны.

Ответ 3



Вопрос уже давно закрыт, но я сейчас нарыл дополнительное решение: Можно написать свое приложение, которое читает excel файл и выводит его содержимое в терминал с помощью java-библиотеки apache-poi.

воскресенье, 8 декабря 2019 г.

Бесплатная библиотека для работы с *.DOCX

#c_sharp #net #поиск_библиотек #docx


Посоветуйте бесплатную и хорошо документированную библиотеку для работы с *.DOCX.

Знаю, что есть OpenXML, но что есть в природе удобного помимо него?

Например, для Excel есть удобная EpPlus.
    


Ответы

Ответ 1



DocX Git Exp: DocX doc= DocX.Create(filePath); Paragraph p1 = template.InsertParagraph(); p1.AppendLine("This line contains a ").Append("bold").Bold().Append(" word."); p1.AppendLine("Here is example with question mark?"); p1.AppendLine(); p1.AppendLine("Can you help me figure it out?"); p1.AppendLine(); Очень проста в использовании.

Ответ 2



Есть такая open-source С++ библиотека DocxFactory для генерации DOCX документов. Для неё в том числе есть обертка для C#. Прикладываю ссылку на туториал. Судя по документации, основной функционал работы она поддерживает(сам не пробовал использовать на проектах). В документации имеются куски примеров по работе с DOCX. Также ссылка на github-проект. Если требуется, можно попробовать создать какой-то экзампел.

Ответ 3



Microsoft.Office.Interop.Word Как известно, Microsoft Word является COM-объектом, т.е. спроектирован таким образом, что позволяет другим программам подключаться к себе и управлять им. Программно можно проделать практически все операции, которые мы делаем вручную в Word: создать новый документ, внести в него правки, сохранить его и т.п. Но для ее работы требуется лицензия MS Office на каждом клиентском компьютере. Кроме того, MS Office загружается в фоновом режиме, вследствие чего занимает определенное количество оперативной памяти и загружает большое количество файлов и DLL. Приложения MS Office были разработаны как приложения для пользовательского интерфейса, и поэтому Microsoft.Office.Interop.Word работает очень медленно. Microsoft не рекомендует использовать Office Automation (или любой Office Interop) на сервере. DocumentFormat.OpenXml Open XML SDK предоставляет инструменты для работы с документами Office Word, Excel и PowerPoint. Он поддерживает такие сценарии, как заполнение содержимого в файлах Word из источника данных XML, разделение (измельчение) файла Word или PowerPoint на несколько файлов и объединение нескольких файлов Word, поиск и замена контента с использованием регулярных выражений. Но при присвоении некоторого стиля, в свойствах предоставляется только идентификатор предоставленого стиля, а сам стиль описывается отдельно в файле style.xml. В результате необходимости регулярного сопоставления ID стиля с контейнером style.xml для получения характеристик стилей абзацев, возрастает сложность программного использования библиотеки. link Spire.Doc Spire.Doc для .NET - это полностью независимая библиотека классов .NET Word, специально созданная для разработчиков, которая позволяет быстро генерировать, открывать, писать, редактировать и сохранять документы Word не требует установки в систему каждого пользователя MS Office, то есть возможность полностью независимой от него работы; объемная документация с примерами и пояснениями. Работать с библиотекой достатосно удобно. Однако полная версия Spire.Doc не является бесплатной, а бесплатная версия, FreeSpire.Doc, имеет определенные ограничения (например обработка не более 500 абзацев и 25 таблиц). link

вторник, 5 марта 2019 г.

Копирование химических формул из .docx

Как с помощью библиотеки python-docx извлечь химическую формулу из текста ячейки таблицы и перенести ее в другую таблицу?
Если копировать, как текст, то нет разницы между цифрой в верхнем, нижнем или обычном регистре
Пример таблицы


Ответ

В версии 0.8.6 python-docx этот функционал отсутствует, даже нужного пространства имен нет и нигде нет упоминания нужных тегов, то есть нет ни единого упоминания возможности работы с математическими элементами. Формулы из Word, например, в сыром виде выглядят как-то так. Исходная формула: ex=sin(x)
docx:
e x =isin(x)
То есть вы можете попробовать спуститься в самый адок и обращаться с docx, как с набором XML документов. И вам необходимо найти в параграфе, в ячейке, где хотите нужный тег и потом вставить также в новый параграф, ячейку, куда хотите. Вот такой вот примерчик приведу. Он копирует формулу из одного документа, в пустой другой документ. В исходном документе нет ничего, кроме этой формулы. Однако, я бы уверенно себя не чувствовал на этом пути, даже если простой пример и работает. Также вместо тупого итерирования вы можете отыскать нужный элемент с тегом в пространстве {"m": xmlns:m="http://schemas.openxmlformats.org/officeDocument/2006/math"}. Итак:
import docx
d = docx.Document("formula_test.docx")
new_doc = docx.Document() new_para = new_doc.add_paragraph() new_para_elem = new_para._element
para_with_formula = d.paragraphs[0]
# Это уже объект типа CT_P, родителем которого является lxml.Element elem = para_with_formula._element # Пространство имен `m` xmlns:m="http://schemas.openxmlformats.org/officeDocument/2006/math" tmp_ns = {"m": "http://schemas.openxmlformats.org/officeDocument/2006/math"}
math_tag_with_namespace = "{" + tmp_ns["m"] + "}oMathPara"
for i in elem.getiterator(): if i.tag == math_tag_with_namespace: print("OH! A formula!") new_para_elem.append(i)
new_doc.save("NEW_DOC.docx")
Как результат - в новом документе исходная формула.

понедельник, 4 февраля 2019 г.

Открытие doc, docx, odf, xlsx файла в терминале linux

Вопрос заключается в следующем: "Существует ли такие программы, позволяющие открыть doc, docx, odf файлы в терминале linux?". Понимаю, что теоретически это не возможно, в силу отсутствие возможности программной смены шрифта в терминале. Но! Что если, мне нужно, к примеру, тупо прочитать текст из файла, а под рукой нету десктопной машины? Или можно такой вариант: программа преобразовывает doc, docx, odf файл в tex-файл. P.S.: я так полагаю, что этот вариант открытия подобных файлов будет еще и экономнее десктопного относительно памяти.
С xlsx и подобными этому файлами тоже такой же вопрос встревает. Папа как-то рассказывал просто, что когда еще не было десктопных осей и граф оболочек, они использовали вместо doc-ов какую-то dos-овскую консольную прогу, и какие-то таблицы вместо excel-ей. Буду благодарен за ответ.
UPD: Вопрос закрыт


Ответ

Когда не было графических оболочек, тогда и и форматы были другие. Чем-то отчасти похожие на современный markdown
Файлы же конечно можно прочитать. Но именно прочитать - предварительно конвертировав в текстовый формат. Так Excel файлы можно перевести в CSV - а дальше смотри хоть в less, хоть awk или sed дальше преобразуй.
Файл Word конвертируются в обычный TXT - только текст и никакого форматирования. Можно и в RTF - тут оформление сохранится, но чтобы их читать нужен определенный навык :)
А с практической точки зрения задача довольно актуальная. Постоянно приходится решать задачи типа "У нас есть прайс-лист в Excel - мы хотим его автоматически загружать на сайта в базу данных". Соответственно помимо утилит консоли есть и куча библиотек под разные языки программирования - позволяющих открыть, прочитать, изменить и сохранить файлы этих форматов без взякого GUI.