Все технические форумы на одном сайте Удобный поиск информации с популярных форумов в одном месте
Вопрос: Сохранить форматирование файла .docx

Задача - заменить некоторые куски текста в файле .docx. Заменяться будет только текст, в том числе текст может быть в таблице. Соответственно должно полностью сохраниться исходное форматирование - к примеру, разметка страницы, шрифт и размер текста,
положение рисунков и таблиц в тексте
При этом выходной файл может быть получен 2 путями:
1. Редактированием исходного файла с последующим сохранением
2. Созданием нового файла и копированием в него результата
Сейчас использую 2-й вариант при помощи python-docx
document = Document()
doc = docx.Document(source)
for paragraph in doc.paragraphs:
     # Обработка текста попараграфно
     par = paragraph.text
     document.add_paragraph(par)
document.save(result)  

Как можно догадаться, форматирование не сохраняется, картинки и таблицы вообще не переносятся
Подскажите, как решить задачу?
Ответ: Как вариант, конечно. Не самый простейший и быстрый, но вполне рабочий.

1. Распаковываем исходный docx как зип-архив. Получится кучка файлов.
2. Разбираемся, куда-что там понапихали, находим желаемые тексты.
3. В нужных местах вносим нужные изменения.
4. Упаковываем файлы обратно в архив.
Вопрос: Открытие файла docx или doc

Подскажите, пожалуйста, как прописать, чтоб при нажатии на кнопку открывался(загружался) файл docx или doc?
Ответ: Для выбора файла используй компонент OpenDialog. В дальнейшем вместо конкретного пути к файлу просто прописываешь OpenDialog1->FileName...
Код C++
1
2
3
4
5
void __fastcall TForm1::Button1Click(TObject *Sender)
{
  if(OpenDialog1->Execute())
    ShellExecute(NULL,"open",OpenDialog1->FileName.c_str,NULL,NULL,SW_SHOW);
}
Вопрос: Детектив: удаляются файлы на сетевом диске при открытии файла *.docx :( Но как ?

Всем добрый день!

Исходные данные детектива:

- есть сетевая расшаренная папка на доменном файловом сервере под Win 2003 Server (папок на самом деле море, но проблема с одной)
- в папке около 360 шт *.doc, *.docx, *.xls, *.xlsx файлов
- с папкой с локальных компов работают 2 доменных юзера, с правами на Изменение (у них Win7, Office 2010, KES 10)
- папка на компах юзеров прописана как сетевой диск U: (это оказалось имеет значение, см. далее ...)

Проблема:

Где-то с марта 2016 из папки стали спонтанным образом пропадать файлы по 110 - 150 шт за раз.
Т.к. сначала это происходило не часто (раз в 1-2 недели), списывал это на косяки юзеров, хотя они дружно уходили в отказ, и восстанавливал пропажу из бекапа. Когда удаления файлов пошли через 2-3 дня и чаще, начал копать...

Что сделал:

- включил аудит на папку на сервере (он показал, да, удаления идут с под этими юзерами, юзеры в моменты удаления ничего особенного по их словам не делают: открывают, редактируют файлы MS Office, используют поиск в виндовом проводнике)

- визуально список удаленных файлов не имеет никаких общих признаков в названиях, по которым их можно было бы отобрать поиском и случайно удалить скопом (по датам создания, изменения не смотрел)

- когда вконец это достало, написал скрипт, который тупо с периодом 1 мин мониторил кол-во файлов в шаре и, в момент пропадания более 10 шт, выдавал мне WTF на дисплей. Искать точный момент события по логу аудита на сервере затруднительно. Так удалось исключить потерю памяти у пользователя и опросить ее сразу: что ты сейчас сделала?! Юзер всего лишь открыла файл *.docx :(

Проверяю сам:

- восстанавливаю пропажу из бекапа
- с компа юзера, и под ее пользователем открываю тот же *.docx (56 кб, 4 стр. обычного текста договора), - все, зловред найден - файлы удалились на моих глазах
- предполагаю, все просто - в файле сидит VBA код. Но, не тут-то было: по ALT-F11 в файле нет и намека на макросы. Да и запуск макросов у этих юзеров давно сам отключил в настройках Office
- копаю дальше и нахожу еще несколько *.docx с таким же "функционалом": их открытие в Word всегда удаляет 115 (!!!) файлов. Удаление происходит именно в момент открытия. Открытие *.xlsx проходит штатно.

Провожу эксперименты:

- копирую всю шару локально на комп юзера на диск D:, открываю *.docx под юзером - файлы не пропали, проблема только на шаре ...
- сажусь за свой комп (те же Win7, Office 2010 и KES 10), открываю *.docx на серверной шаре - права домен админа - файлы не пропали ...
- на компе юзера в Word сохраняю *.docx как *.doc, открываю *.doc под юзером - файлы не пропали ...
- на компе юзера в Word пересохраняю *.doc как *.docx (в надежде что зловред сидит в файле и потрется), открываю *.docx под юзером - файлы опять пропали :(
- предполагаю это баг пакета MS Office 2010 и накатываю на компы Service Pack 2 для Office 2010. Не помогло :(
- гружусь на компе юзера в свой профиль и открываю *.docx в сетевой шаре - файлы не пропали! Вот оно - баг в профиле юзера ...
- удаляю профиль юзера и создаю заново, вот сейчас все нормализуется... Фиг тебе - опять 115 шт файлов deleted :((
- задаюсь вопросом, а чем мой профиль (под ним файлы не удаляются) на компе юзера отличается от профиля юзера, кроме моих прав админа? Ответ: на шару в своем профиле захожу вбивая путь вручную в проводнике, в профиле юзера захожу через сетевой диск U:
- тут же в своем профиле подключаю папку как диск U: - всё, удаления при открытии *.docx начались и под поим профилем :(

Теряясь в догадках:

- меняю букву сетевого диска с U на другую (Y). Удаление прекратилось! И под моим профилем и в профиле юзера. На компе второго юзера, то же: замена буквы сетевого диска с U на любую другую свободную, снимает проблему.

Мистика. У кого-нибудь есть идеи? Что не так с буквой U сетевой шары?

Заранее спасибо за ответы!
Ответ: Как у макросодела, первая мысль: в шаблоне этих документов, висит макрос, перехватывающий открытие. Это стандартное событие VBA, перехватывающее открытие документов, созданных на базе шаблона. Я бы глянул шаблон. А для отсечки варианта со скриптами Word, запретил бы в настройках безопасности Word все макросы и надстройки, по максимуму.
Вопрос: Нахождение RegEx в файлах docx

Через объект класса System.Text.RegularExpressions.Regex, задавал регулярное выражение, параллельно считывая текст из файла .docx в переменную string, но так как объем текста большой, программа подвисает.
Существуют ли какие-нибудь библиотеки для работы с файлами docx напрямую, без считывания их в переменную string?
Ответ: Владимир90, ,
Вопрос: Как в среде VISUAL C++ 2008 написать программу, осуществляющую поиск текста в файле WORD ?

Здравствуйте !

Подскажите, пожалуйста, как в среде VISUAL C++ 2008 написать программу, осуществляющую поиск текста в файле WORD ?

Программа должна найти строку в документе WORD, которая содержит заданный фрагмент текста.
Ответ: Arventur, а если формат новых, docx, то у него вроде бы какой-то простой формат, архив, а внутри куча xml-ек.
Вопрос: Открыть файл docx через Webbrowser

Как открыть файл docx через компонент webbrowser....
Ответ: При наличии соответствующих плагинов в системе - может хоть что открыть.
Вопрос: Поиск по txt файлу на php

Добрый день!
Помогите не могу сварганить поиск по txt файлу через php
Нужно 3 поля для поиска Город,Улица,Дом

А в txt файле такое содержимое
Москва,Варшавская,50,МТС,БИЛАЙН,РОСТЕЛЕКОМ

Если находит то выводит тест найдено 3 оператора МТС,БИЛАЙН,РОСТЕЛЕКОМ

Подскажите как реализовать? :unsure:
Ответ: хотелось то бы в идеале поиск в 1 строке забивается адрес с живым поиском из базы sql при нажатии на поиск выводились бы дополнительные записи из базы.

Короче вот подобие

Забивается адрес (тут же ищется по базе sql) и выводит провайдеров подключенных по этому адресу!

Кто нибудь помогите, поделюсь монеткой даже на телефончик!
Вопрос: Поиск в текстовом файле

Подскажите, каким образом можно сделать поиск в текстовом файле. Суть проблемы: есть тхт файл, размер и содержание его будет постоянно меняться, нужно сделать поиск и считывание нужного элемента из этого файла в виде массива байт, не считывая весь файл в массив.
Ответ: а чем не угодили функции
Код C#
1
2
3
string s = File.ReadAllText(path) // чтение файла
s.IndexOf();//получение позиции нужного текста
s.SubString()//копирование нужной части
Вопрос: Программа поиска по data файлу

Добрый день!

Есть следующее задание:
1.создать дата файл (список) с информацией включающий 4-6 тегов, с возможностью добавления новой информации администратором. Сам файл будет храниться на общем сервере.
2.сделать оболочку, открыв которую можно осуществить поиск по дата файлу в выводом результата.
поиск должен проводиться по всем словам и тегам которые есть дата файле. Оболочка будет установлена на каждом компьютере который подключен к внутренней сети.
3. сделать лог файл запросов (будет храниться на сервере), который автоматически обновляется. лог файл должен содержать результат запроса, ID компьтера с которого произведено запрос и время вывода результата.

Как это лучше всего осуществить? Буду рад если что-нибудь подскажете.

Примерный вид дата файла
(1. Сборник стандартов
тег1-название
тег2-номер
тег3-краткое описание(текст)
тег4-ссылка (интернет или серверная папка)
тег5-справочные материалы
тег6- ответственное лицо
2. Внутренние инструкции
тег1-название
тег2-номер
тег3-краткое описание(текст)
тег4-ссылка (интернет или серверная папка)
тег5-справочные материалы
тег6- ответственное лицо
)
Ответ:
А еще файл может быть очень большим, а вы в массив собрались загонять его.
Я его ни куда не собирался и не собираюсь загонять
Вопрос: TFindOption: как включить поиск с конца файла?

frDown - поиск с начала файла

как включить поиск "с конца" файла как в любых редакторах
пример
Ответ: HiredKiller,



написано, что если frDown выключен, тогда будет искать вверх, остается только установить указатель в конец файла...