1

C# の AODL ライブラリを使用しています。これまでのところ、2 番目のドキュメントのテキストを最初のドキュメントに卸売りでインポートすることができました。問題は、スタイリングがマージされたドキュメントにも移動されるようにするために何を取得する必要があるかを完全に把握できないことです。以下は、テストに使用している簡単なコードです。私が見つけることができる最も近い答えは、コードから2つの.odtファイルをマージすることです、これは私の質問にいくらか答えますが、スタイリングをどこに配置する必要があるか/どこから取得する必要があるかはまだわかりません。少なくとも、2 番目のドキュメントのスタイルを調べて、最初のドキュメントに一致する名前がないことを確認する必要があることを知らせてくれます。そうしないと、競合が発生します。何をすべきか正確にはわかりませんが、ドキュメントは非常にスリムです。あなたが何かを提案する前に、そうです、odtは私が扱う必要があるファイルタイプであり、MicrosoftがWordで行っているような相互運用性を行うことは、私が望んでいることではありません. AODL と同様に機能する別のライブラリがあれば、私はすべて耳にします。

TextDocument mergeTemplateDoc = ReadContentsOfFile(mergeTemplateFileName);
TextDocument vehicleTemplateDoc = ReadContentsOfFile(vehicleTemplateFileName);

foreach (IContent piece in vehicleTemplateDoc.Content)
{
    XmlNode newNode = mergeTemplateDoc.XmlDoc.ImportNode(piece.Node,true);

    Paragraph p = ParagraphBuilder.CreateParagraphWithExistingNode(mergeTemplateDoc, newNode);

    mergeTemplateDoc.Content.Add(p);
}

mergeTemplateDoc.SaveTo("MergComplete.odt");
4

2 に答える 2

-2

どのくらい正確にコーディングする必要があるかはわかりませんが、7zip を使用して、styles.xml 全体をあるファイルから別のファイルにコピーするだけで済みました。プログラム的には、同じくらい簡単なはずです。私は常にスタイルを使用してファイルをフォーマットし、直接フォーマットを使用することはありません。そのため、ファイルを置き換えるだけで、ローカル スタイルが削除される傾向があります。

この回答を見つけました(「未使用のスタイルのスタイルシートをクリーニングする」という質問に対する)https://www.mobileread.com/forums/showpost.php?s=cbbee08a1204df71ec5cd88bcf222253&p=2100914&postcount=13 1つのドキュメント内のすべてのスタイルを繰り返します。一方を他方に組み込む方法は示されていませんが、バックボーンは明確です。

'---------------------------------------------------------- 03/02/2012
' Supprimer les styles personnalisés inutilisés
' d'un document texte ou d'un classeur
'---------------------------------------------------------------------
sub stylesPersoInutiles()
dim coStylesFamilles as object, oStyleFamille as object
dim oStyle as object, nomFamille as string
dim f as long, x as long
dim ts(), buf as string, iRet as integer
const SEP = ", "

    coStylesFamilles = thisComponent.StyleFamilies
    for f = 0 to coStylesFamilles.count -1
        ' Pour chaque famille
        nomFamille = coStylesFamilles.elementNames(f)
        oStyleFamille = coStylesFamilles.getByName(nomFamille)
        buf = ""
        for x = 0 to oStyleFamille.Count -1
            ' Pour chaque style
            oStyle = oStyleFamille(x)
            'xray oStyle            
            if (oStyle.isUserDefined) and (not oStyle.isInUse) then
                buf = buf & oStyle.name & SEP
            end if
        next x

        if len(buf) > len(SEP) then
            buf = left(buf, len(buf) - len(SEP))
            iRet = msgBox("Styles personnalisés non utilisés : " _
                & chr(13) & buf & chr(13) & chr(13) _
                & "Faut-il les détruire ?", 4+32+256, nomFamille)
            if iRet = 6 then
                ts = split(buf, SEP)
                for x = 0 to uBound(ts) 
                    oStyleFamille.removeByName(ts(x))
                next x
            end if
        end if
    next f
end sub
于 2017-01-26T15:10:20.710 に答える