содержание документа word после обновления файла не обновляется - PullRequest
0 голосов
/ 29 апреля 2020
       using (WordprocessingDocument wordDoc = WordprocessingDocument.Open(rootObject.fileLocation, true))
                {
                    MainDocumentPart mainPart = wordDoc.MainDocumentPart;

                    foreach (CustomXmlPart customXmlPart in mainPart.CustomXmlParts)
                    {

                        bool exists = false;
                        using (XmlTextReader xReader = new XmlTextReader(customXmlPart.GetStream(FileMode.Open, FileAccess.Read)))
                        {
                            XmlDocument xmlDocument = new XmlDocument();
                            xReader.MoveToContent();
                            exists = xReader.NamespaceURI.Equals("urn:TTCProperties:namespace");
                            if (exists)
                            {

                                xmlDocument.Load(xReader);
                                Console.WriteLine("Attribute Name:" + AttribeObject.attributeName);
                                XmlNodeList n = xmlDocument.GetElementsByTagName(AttribeObject.attributeName);
                                if (n != null)
                                {
                                    foreach (XmlNode curr in n)
                                    {
                                        Console.WriteLine(curr.InnerText);
                                        Console.WriteLine("Attribute Value:" + AttribeObject.attributeValue);
                                        curr.InnerText = AttribeObject.attributeValue;


                                    }
                                }

                                StreamReader sr = new StreamReader(customXmlPart.GetStream());
                                Stream stream = customXmlPart.GetStream();
                                stream.SetLength(0);
                                using (StreamWriter ts = new StreamWriter(stream))
                                    ts.Write(xmlDocument.InnerXml);
                                wordDoc.MainDocumentPart.Document.Save(mainPart);

                            }

                        }

                    }

                    wordDoc.Close();
                }
            }
            Console.WriteLine("Application save start");
            Application ap = new Application();
            Console.WriteLine("Application save start1");
            try
            {

                Console.WriteLine("Application save start2");
                rootObject.fileLocation = rootObject.fileLocation.Replace('/', '\\');
                Console.WriteLine("Application save start3");
                FileInfo fileobje = new FileInfo(rootObject.fileLocation);
                Console.WriteLine("Application save start4");
                Console.WriteLine(fileobje.Exists);
                Console.WriteLine("Application save start5");
                Console.WriteLine(fileobje.LastWriteTime);
                Console.WriteLine("Application save start6");
                Document doc = ap.Documents.Open(rootObject.fileLocation);

                Console.WriteLine("Application save start7");
                doc.Activate();
                Console.WriteLine("Application save start8");
                //doc.RemoveDocumentInformation(WdRemoveDocInfoType.wdRDIAll);
                doc.Save();
                Console.WriteLine("Application save start9");
                ap.Documents.Save();
                Console.WriteLine("Application save start10");
                //ap.Documents.Save(NoPrompt: true, OriginalFormat: true);
                ap.Documents.Close(SaveChanges: false, OriginalFormat: false, RouteDocument: false);
                Console.WriteLine("Application save start11");
                Console.Write("after save");
                Console.WriteLine(fileobje.LastWriteTime);

            }
            catch (Exception ex)
            {
                Console.WriteLine("Exception Caught: " + ex.Message); // Could be that the document is already open (/) or Word is in Memory(?)
            }
            finally
            {
                // Ambiguity between method 'Microsoft.Office.Interop.Word._Application.Quit(ref object, ref object, ref object)' and non-method 'Microsoft.Office.Interop.Word.ApplicationEvents4_Event.Quit'. Using method group.
                // ap.Quit( SaveChanges: false, OriginalFormat: false, RouteDocument: false );
                ((_Application)ap).Quit(SaveChanges: false, OriginalFormat: false, RouteDocument: false);

                System.Runtime.InteropServices.Marshal.ReleaseComObject(ap);
            }

предположим, что мы извлекаем файл слов, мы получаем пользовательскую папку xml, у них есть пользовательский файл xml, такой как item1. xml, item2. xml ... наш атрибут находится в этом файле. мы получаем пользовательскую xml деталь, используя mainPart.CustomXmlParts, находим значение нашего тега и обновляем его. так что его успешно обновить в Custompart xml. но то же значение тега есть в документе. xml в папке word,

у нас office2010, мы открываем и сохраняем документ, используя приведенный ниже код. сохраняем документ и обновляем документ. xml file.

но в другой системе у нас есть офис365, мы запускаем тот же код, что и документ, который не обновляется. xml в папке word.

Приложение ap = новое приложение (); Console.WriteLine («Приложение сохраняет start1»); попробуйте {

            rootObject.fileLocation = rootObject.fileLocation.Replace('/', '\\');
            Console.WriteLine("Application save start3");
            FileInfo fileobje = new FileInfo(rootObject.fileLocation);
            Document doc = ap.Documents.Open(rootObject.fileLocation);

            doc.Activate();
            //doc.RemoveDocumentInformation(WdRemoveDocInfoType.wdRDIAll);
            doc.Save();
            ap.Documents.Save();
            Console.WriteLine("Application save start10");
         ap.Documents.Close(SaveChanges: false, OriginalFormat: false, RouteDocument: false);

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

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...