Много Excel.Chart + Word = Засада
От: max2k1  
Дата: 23.07.07 12:51
Оценка:
Помогите, может кто сталкивался:
Создаю документ в ворде, куда вставляю много диаграмм.
Почему-то периодически только что созданные диаграммы начинают открываться на редактирование
не внутри документа Word (типа внедренный объект), а в отдельном контейнере excel (появляется
отдельное окно Excel). При этом напрочь пропадает всякая возможность управлять размером
соответствующего InlineShape'а.

Какой-либо закономерности я не обнаружил. Ерунда такая наблюдается во всей линейке MS Office'ов.
Пробовал на разных компах.
Привожу маленькую прогу для эксперимента. После ее запуска открывается Word и создается 10 диаграмм.
У меня примерно на 7-ой начинаются вышеописанные глюки.

using System;
using System.Collections.Generic;
using System.Text;
using System.Reflection;
using System.Runtime.InteropServices;

namespace TestApp
{
    class Program
    {
        static void Main(string[] args)
        {
            object v_missing = System.Reflection.Missing.Value;

            Microsoft.Office.Interop.Word._Application v_word = null;
            Microsoft.Office.Interop.Word._Document v_doc = null;
            v_word = new Microsoft.Office.Interop.Word.Application();
            v_word.Visible = true;
            v_doc = v_word.Documents.Add(ref v_missing, ref v_missing, ref v_missing, ref v_missing);
            v_doc.Activate();

            for(int v_i = 0; v_i < 10; v_i++)
            {
                object v_type = "Excel.Chart";
                object v_endOfDoc = "\\endofdoc"; /* \endofdoc is a predefined bookmark */
                object v_rng = v_doc.Bookmarks.get_Item(ref v_endOfDoc).Range;
                Microsoft.Office.Interop.Word.Paragraph v_para = v_doc.Content.Paragraphs.Add(ref v_rng);

                Microsoft.Office.Interop.Word.InlineShape v_shape = v_para.Range.InlineShapes.AddOLEObject(ref v_type, ref v_missing, ref v_missing, ref v_missing, ref v_missing, ref v_missing, ref v_missing, ref v_missing);
                v_shape.Width = 300;
                v_shape.Width = 400;
                v_para.Range.InsertParagraphAfter();

            }
        }
    }
}
 
Подождите ...
Wait...
Пока на собственное сообщение не было ответов, его можно удалить.