abdul subhan mohammed Ответов: 1

Как получить индекс smartart из существующего документа word с помощью word interop C#


Дорогие Все,

Я хочу оценить форму smartart, которая уже вставлена в существующий документ word. Где документ содержит n количество фигур smartart.

Я уже искал в google по этому поводу, но не нашел подходящего.

Пожалуйста, ознакомьтесь с моим кодом....

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

public static bool EvaluateSmartArtShape(IQuestion question, string filename, SmartArtShapes _smartArtShape)
       {
           WordInterop.Application wordApplication = GetOrCreateWordApplication(question.ObjectStore);

           try
           {
               //Avoid screen flickering or unwanted alerts while initializing
               wordApplication.ScreenUpdating = false;
               WordInterop.WdAlertLevel displayAlertLevel = wordApplication.DisplayAlerts;
               wordApplication.DisplayAlerts = WordInterop.WdAlertLevel.wdAlertsNone;

               WordInterop.Document wordDocument = wordApplication.Documents.Open(filename);
               //WORD
               WordInterop.Shapes ws = wordDocument.Shapes;
               foreach(WordInterop.Shape s in ws)
               {
                   if (s.HasSmartArt == MsoTriState.msoTrue)
                   {
                       if (s == wordApplication.SmartArtLayouts[(int)_smartArtShape])//line 697
                       {
                           return true;
                       }
                   }
               }
               wordDocument.Close();

           }
           catch (Exception ee)
           {
               string strError = ee.ToString();
               Cleanup(question.ObjectStore, true);
           }
           return false;
       }


Ошибка:
System.Runtime.InteropServices.COMException (0x80010105): The server threw an exception. (Exception from HRESULT: 0x80010105 (RPC_E_SERVERFAULT))
   at Microsoft.Office.Core.SmartArtLayouts.get_Item(Object Index)
   at TeTec.Action.Office2013.Word.WordHelper.EvaluateSmartArtShape(IQuestion question, String filename, SmartArtShapes _smartArtShape) in C:\TETEC\Development\TeTec.Action\Office\Office2013\Word\WordHelper.cs:line 697


Может ли кто-нибудь мне помочь?


Спасибо

Maciej Los

Кажется _smartArtShape представляет собой коллекцию SmartArtShapes.. Если я прав, то вы не можете преобразовать коллекцию в целочисленное значение.

F-ES Sitecore

Автоматизация Word не поддерживается в соответствии с asp.net. Может показаться, что это работает на вашем локальном компьютере, но при развертывании это не сработает.

abdul subhan mohammed

Это приложение winfroms

OriginalGriff

Не "ударяйте" свой вопрос: это грубо, высокомерно, ненужно и не поможет вам получить более быстрый ответ. Во что бы то ни стало добавьте информацию, но просто отредактируйте ее, чтобы вернуть в начало списка "без ответа", это просто говорит: "Я важнее всех остальных, так что разберитесь с моим вопросом и игнорируйте остальное".
Как и все остальные, и все остальные вопросы. Если бы все были такими бездумными и грубыми, вы никогда не получили бы ответа ни на что, потому что все, что мы могли бы увидеть, было бы 100 страниц идиотов, сталкивающих все реальные вопросы на страницу 100+
Все, что вы делаете, это раздражаете людей и заставляете их намеренно даже не смотреть на ваш вопрос, не говоря уже о том, чтобы ответить на него.

abdul subhan mohammed

Прошу прощения, то, что вы говорите, правильно, но, дорогая, что, если мой вопрос дойдет до последнего, где только немногие люди пройдут через него?

1 Ответов

Рейтинг:
2

abdul subhan mohammed

public static bool EvaluateSmartArtShape(IQuestion question, string filename, SmartArtShapes _smartArtShape)
        {
            WordInterop.Application wordApplication = GetOrCreateWordApplication(question.ObjectStore);

            try
            {
                //Avoid screen flickering or unwanted alerts while initializing
                wordApplication.ScreenUpdating = false;
                WordInterop.WdAlertLevel displayAlertLevel = wordApplication.DisplayAlerts;
                wordApplication.DisplayAlerts = WordInterop.WdAlertLevel.wdAlertsNone;

                WordInterop.Document wordDocument = wordApplication.Documents.Open(filename);

                bool result = false;
                //WORD
                WordInterop.Shape tempSmartShape = null;
                WordInterop.Shapes ws = wordDocument.Shapes;
                foreach (WordInterop.Shape s in ws)
                {
                    if (s.HasSmartArt == MsoTriState.msoTrue)
                    {
                        tempSmartShape = s;
                        SmartArt _smartArt = tempSmartShape.SmartArt;
                        string _smartArtName = _smartArt.Layout.Name;

                        if (_smartArtName.Replace(" ", "").Trim().ToLower() == _smartArtShape.ToString().Trim().ToLower())
                            result = true;

                        break;
                    }
                }                

                wordDocument.Close();
                return result;

            }
            catch (Exception)
            {
                Cleanup(question.ObjectStore, true);
            }
            return false;
        }