Member 13606887 Ответов: 3

Заменить слово-взаимодействие с раствором Либре/в OpenOffice.


Цель:
иметь возможность распространять наше приложение с любыми библиотеками, необходимыми для управления заменой на стороне клиента, без зависимости от Microsoft (и лицензий == $$)
ОПЕРАЦИОННАЯ
Любые другие советы, которые вам могут понадобиться, позволят нам получить фиксированный файл .DOC/.ODT + данные Oracle, чтобы создать пользовательское письмо и открыть его конечному пользователю для редактирования деталей.

Если у вас есть какие-либо сомнения по поводу альтернативных вариантов, я буду рад услышать вас!

Прямо сейчас у меня есть SW, использующий MS Interop, как показано ниже:

'-------------- Código principal -------------------------------------------

Microsoft.Office.Interop.Word.Application oApp;
Microsoft.Office.Interop.Word.Document oDoc;

object missing = Missing.Value;
object readOnly = false;
object isVisible = false;
object template = ArquivoOrigem;

oApp = new Microsoft.Office.Interop.Word.Application();
oDoc = oApp.Documents.Open(ref ArquivoDestino, ref missing,
	ref readOnly, ref missing, ref missing, ref missing,
	ref missing, ref missing, ref missing, ref missing,
	ref missing, ref isVisible, ref missing, ref missing,
	ref missing, ref missing);
oDoc.Activate();

ReplaceVariable(oDoc, "#NAME#", "JOHN");

   oDoc.Save();
object saveChanges = Microsoft.Office.Interop.Word.WdSaveOptions.wdSaveChanges;
oApp.Quit(ref saveChanges, ref missing, ref missing);
				
'------ Função ReplaceVariable -------------------------------------------
				
private static void ReplaceVariable(Microsoft.Office.Interop.Word.Document oDoc, object FindText, object ReplaceWith)
{
	object MatchWholeWord = true;
	object Foward = false;
	object missing = Missing.Value;
	Microsoft.Office.Interop.Word.Range oRng;

	oRng = oDoc.Range(ref missing, ref missing);

	oRng.Find.Execute(ref FindText, ref missing, ref MatchWholeWord, ref missing, ref missing,
				   ref missing, ref missing, ref missing, ref missing, ref ReplaceWith,
				   ref missing, ref missing, ref missing, ref missing, ref missing);

	oRng = oDoc.Range(ref missing, ref missing);
}
'--------------- end of code ------------


Это позволяет нам иметь шаблонный документ и использовать наш SW для замены полей значениями из базы данных Oracle.

Теперь мы хотели бы удалить эту зависимость Microsoft и использовать только решения LibreOffice/OpenOffice (free/open).

Какие-нибудь советы ?

Что я уже пробовал:

Просто с тех пор использовал решение Microsoft Interop... понятия не имею, с чего начать переход на ODT-библиотеки.

3 Ответов

Рейтинг:
2

AnvilRanger

Вы можете взглянуть на Open XML SDK, Добро пожаловать в Open XML SDK 2.5 для Office[^]


Maciej Los

LbreOffice-это не то же самое, что OpenXml...

Рейтинг:
0

Member 13606887

Я мог бы поклясться, что написал здесь ответ, в любом случае вот ответ.
LibreOffice и другие, использующие ODF (форматы OpenDocument), не нуждаются в этой вещи DDE/Interop.

Формат .ODT содержит XML в ZIP-файле.
Таким образом, вы можете открыть zip-файл, отредактировать его content.xml файл и замените переменную #CLIENT_NAME# на любую другую, которую вы хотите сохранить.
Просто сожмите все обратно в ZIP - файл и назовите его расширением ODT, и все работает.

Вот пример файла, который я создал, чтобы проверить это на linux CLI:

вы должны назвать это как:
LO-subs.sh файл.ODT имя клиента номер телефона
где
1-й параметр-это имя файла, где будут происходить подводные лодки,
2-й параметр-это имя клиента для замены переменной ##cliente##
3-й параметр-это номер телефона клиента, который заменит переменную ##Fone##
(см. переменную в сценарии оболочки).

[root@andorinha ~]# cat LO-subs.sh
Arquivo=$1
Nome=$2
Fone=$3
dest="/tmp/LOs1"

mkdir $dest

cp $Arquivo $dest/
cd $dest
unzip $Arquivo
sed -i "s/\#\#cliente\#\#/$Nome/" content.xml
sed -i "s/\#\#telefone\#\#/$Fone/" content.xml
zip $Arquivo *
cd $dest

Я использовал его успешно, поэтому, если кому-то нужна помощь, пожалуйста, напишите электронное письмо на мой аккаунт gmail: jader.marasca

Я буду рад помочь!


Рейтинг:
0

Member 13606887

Другого выхода нет ? OpenXML @ Microsoft, по-видимому, не является жизнеспособным решением.