Многолистовые документы

Автор L, 24.03.09, 10:24:10

« назад - далее »

0 Пользователи и 1 гость просматривают эту тему.

L

Доброго времени суток.

Есть проблема. Надеюсь кто-нибудь подскажет как ее решить.
Необходимо в многолистовом документе получить формат каждого листа. Пока удается получить количество листов и формат первого.

Получают так:
ksDocument2D.ksGetDocOptions(SHEET_OPTIONS_EX, SheetOpt)

Параметры берутся для текущего листа.

Отсюда 2 вопроса:
1. Как получить свойства листа кроме первого?
2. Как сделать текущим другой лист?

cosmosliva

по второму вопросу не понятно что значит сделать текущим
и зачем оно надо (или по другому не знаю)

по первому вопросу
Пример на C#
(сразу оговорюсь не знаю насколько по правильному (с точки зрения чистоты программирования) сие написано, но работает)
работает только для документа "Чертеж".


           // подключаемся к текущей сессии
            string progId = "KOMPAS.Application.5";
            try
            {
                kompas = (KompasObject)Marshal.GetActiveObject(progId);
            }
            catch (Exception)
            {
                MessageBox.Show("Подключение к Компасу не прошло");
            }
            if (kompas!=null)
            {
             kompas.Visible = true;
             kompas.ActivateControllerAPI();
             ksDocument2D doc = (ksDocument2D)kompas.ActiveDocument2D();

// Узнаём количество листов в документе,
// соответственно можно организовать цикл по прохождениям по всем листам
// важно помнить что нумерация начинается с 1 - как и указана в штампе чертежа
            int CountPages = doc.ksGetDocumentPagesCount();

//используем API  - 7 версии
            KompasAPI7._Application My7Komp = (_Application)kompas.ksGetApplication7();
            IKompasAPIObject retw = My7Komp.ActiveDocument;

// здесь искомый номер листа
            int numb=2;

// правильней наверное было идти по шагам постепенно
// сначало ActiveDocument, затем LayoutSheets, затем get_ItemByNumber
// т.е. мы пропустили коллекцию листов - LayoutSheets - и сразу обратились по номеру
            LayoutSheet MyLSheet = My7Komp.ActiveDocument.LayoutSheets.get_ItemByNumber(numb);

// обращаемся к искомому объекту SheetFormat в котром и хранятся все данные о листе
// формат, ориентация, кратность, высота, ширина,
            SheetFormat ShFormat = MyLSheet.Format;

// получаем формат в ввиде перечисления
            ksDocumentFormatEnum YesFormat = ShFormat.Format;

// радуемся но не совсем,
label8.Text = YesFormat.ToString();//тк получим значение = ksFormatA3

// для перевода в человеческий вид
            int fgg = YesFormat.GetHashCode();
            label9.Text = "А"+fgg.ToString();
            }
        }

L

Спасибо за помощь. Все прекрасно работает.

L

Свойство ILayoutSheets.ItemByNumber выдает ошибку если в документе нет чертежа с указанным номером.

ILayoutSheets.Item работает по индексу. Его и использую, поскольку необходимо перебирать все листы, независимо от наличия номера.