|
![]() |
#1 |
Moderator
|
ХА-ХА-ХАААА... А вообще всё было проще!
![]() ![]() COMVariant для Zoom!! X++: #define.xlDialogPageSetup(7) static void Job211(Args _args) { ComExcelDocument_RU excel = new ComExcelDocument_RU(); COM doc; COM app; COM worksheet; COM pageSetup; COM temp; COMVariant cv = new COMVariant(); ; excel.newFile(); doc = Excel.getComDocument(); app = doc.Application(); worksheet = app.ActiveSheet(); pageSetup = worksheet.PageSetup(); cv.boolean(false); pageSetup.Zoom(cv); pageSetup.FitToPagesWide(2); pageSetup.FitToPagesTall(3); // это для демонстрации того, что получается temp = app.Dialogs(); temp = temp.Item(#xlDialogPageSetup); temp.Show(); } Последний раз редактировалось Gustav; 30.09.2009 в 20:14. |
|
|
За это сообщение автора поблагодарили: Alenka (1), zelibobis (1), decoder (1). |
![]() |
#2 |
Moderator
|
Ну типа, ага. Между прочим, какое-то Ваше же сообщение и вспомнил на эту тему
![]() Владимир, а не посмотрите еще одну затыку: Цитата:
P.S. Хотя я, наверное, допёр... Надо было внимательно читать собственную ссылку: Цитата:
Сообщение от Gustav
![]() Нашёл пилюлю вот здесь: http://www.ozgrid.com/forum/showthread.php?t=49644
X++: int fitToPagesWide = 10; COMVariant cvWide = new COMVariant(); if (fitToPagesWide) cvWide.int( fitToPagesWide ); else cvWide.boolean( false ); pageSetup.FitToPagesWide(cvWide); Последний раз редактировалось Gustav; 30.09.2009 в 23:54. |
|
![]() |
#3 |
Moderator
|
Проверил, работает. Выстрадался окончательный вариант:
X++: #define.xlDialogPageSetup(7) static void Job212(Args _args) { ComExcelDocument_RU excel = new ComExcelDocument_RU(); COM doc; COM app; COM worksheet; COM pageSetup; COM temp; int fitToPagesWide = 5; // страниц в ширину int fitToPagesTall = 0; // страниц в высоту, если 0, то поле пустое COMVariant cvZoom = COMVariant::createFromBoolean(false); COMVariant cvWide = fitToPagesWide ? COMVariant::createFromInt( fitToPagesWide ) : COMVariant::createFromBoolean( false ); COMVariant cvTall = fitToPagesTall ? COMVariant::createFromInt( fitToPagesTall ) : COMVariant::createFromBoolean( false ) ; ; excel.newFile(); doc = excel.getComDocument(); app = doc.Application(); worksheet = app.ActiveSheet(); pageSetup = worksheet.PageSetup(); pageSetup.Zoom(cvZoom); pageSetup.FitToPagesWide(cvWide); pageSetup.FitToPagesTall(cvTall); // это для демонстрации того, что получается temp = app.Dialogs(); temp = temp.Item(#xlDialogPageSetup); temp.Show(); } |
|
![]() |
#4 |
Moderator
|
И всё-таки сгодится в хозяйстве макро PAGE.SETUP
Я еще раз внимательно изучил ссылку-пилюлю: http://www.ozgrid.com/forum/showthread.php?t=49644.
Человеку, который там задает вопрос, нужно было следующее: прочитать значение процентов масштабирования после того, как ранее была применена подгонка по страницам (Fit to). Когда это делается вручную, то сначала устанавливаются значения Fit to и жмётся OK. Рабочий лист при этом должен быть с большим количеством данных, иначе эффекта масштабирования не будет - пустой лист не масштабируется. Далее повторно вызываем диалог "Page Setup" и видим, что в поле "Adjust to...% normal size" отображается конкретный процент масштабирования, который автоматически рассчитался в Excel по нашем параметрам подгонки. И пусть это значение нам и нужно получить в коде. Отвечающий на вопрос там предлагает дважды выполнить команду PAGE.SETUP. Но мы-то вроде умеем уже и без нее устанавливать необходимые свойства. Правда, оказывается, что этого недостаточно для получения значения Zoom'а... Не буду вдаваться в подробности, а просто приведу джоб в окончательном виде, когда мне удалось прочитать значение процентов масштабирования после подгонки, и вы сами всё увидите: X++: static void Job212_PageSetupReadPercent(Args _args) { ComExcelDocument_RU excel = new ComExcelDocument_RU(); COM doc; COM app; COM worksheet; COM pageSetup; COM temp; COM range; str macroFormula; str xlForLang = KKu::excelFormulaLanguage(app); int fitToPagesWide = 0; int fitToPagesTall = 5; COMVariant cvZoom = COMVariant::createFromBoolean(false); COMVariant cvZoomNum; COMVariant cvWide = fitToPagesWide ? COMVariant::createFromInt( fitToPagesWide ) : COMVariant::createFromBoolean( false ); COMVariant cvTall = fitToPagesTall ? COMVariant::createFromInt( fitToPagesTall ) : COMVariant::createFromBoolean( false ) ; void executePageSetup() { // даже "холостой" вызов PAGE.SETUP (т.е. без параметров) // как бы является нажатием кнопки ОК в диалоге "Page Setup" macroFormula = strFmt('%1()', xlForLang=='English'?'PAGE.SETUP':'ПАРАМЕТРЫ.СТРАНИЦЫ'); app.ExecuteExcel4Macro(macroFormula); } ; excel.newFile(); doc = excel.getComDocument(); app = doc.Application(); // заполняем лист большим количеством данных worksheet = app.ActiveSheet(); range = worksheet.Range('A1:Z1000'); range.Value2('test'); pageSetup = worksheet.PageSetup(); pageSetup.Zoom(cvZoom); pageSetup.FitToPagesWide(cvWide); pageSetup.FitToPagesTall(cvTall); // сравните с иным конечным видом диалога "Page Setup, // закомментировав следующую строку executePageSetup(); pageSetup.FitToPagesWide(cvZoom); // cvZoom здесь используется pageSetup.FitToPagesTall(cvZoom); // как носитель значения false // сравните с иным конечным видом диалога "Page Setup, // закомментировав следующую строку executePageSetup(); // читаем значение процентов масштабирования cvZoomNum = pageSetup.Zoom(); box::info(strFmt('Adjust to %1 % normal size', cvZoomNum.long())); // это для демонстрации того, что получается temp = app.Dialogs(); temp = temp.Item(#xlDialogPageSetup); temp.Show(); } После запуска этого же джоба с закомментированными строками executePageSetup (см. в комментариях, где я прошу это сделать) картинки будут менее радостными: Вот как-то так... Уфф... И приятно, что ЦСКА вчера не посрамил Страну и выиграл 2:1 ![]() |
|
![]() |
#5 |
Участник
|
Еще вопрос.. для кучи
![]() На форме установлен элемент ActiveX "ExcelSheet" и в нем есть "экселевское" меню в том числе кнопка "Экспорт в Microsoft Excel". Можно ли при экспорте этой кнопкой попутно задать значение параметра страницы (напр. тот же самый "Разместить не более чем на 1 стр. в ширину и 1 стр. в высоту") создаваемого документа? Или это ActiveX и его нельзя.. или я чего-то не понимаю.. ![]() |
|
![]() |
#6 |
Moderator
|
Цитата:
Файлы по Spreadsheet'у, которые наверняка есть на вашем компутере:
В OWCDSS11.CHM про печать говорится следующее: Цитата:
Печать листа
Для печати электронной таблицы, открытой в обозревателе, необходимо напечатать всю страницу. В обозревателе Microsoft Internet Explorer, в меню Файл выберите команду Печать. Примечание. Если электронная таблица шире или длиннее печатной страницы, области, выходящие за ее границы, не печатаются. Для расширения возможностей управления печатью данных, включая возможность печати длинных таблиц и расстановки разрывов страниц, электронную таблицу можно экспортировать в Microsoft Excel, нажав на панели инструментов кнопку Экспорт в Microsoft Excel . Сведения о печати из Microsoft Excel содержатся в справке по Microsoft Excel. |
|
![]() |
#7 |
Участник
|
Столкнулся с похожей проблемой, необходимо измений масштаб примечания в Excel, VBA-код:
X++: Range("A1").AddComment Range("A1").Comment.Visible = False Range("A1").Comment.Text Text:="*:" Selection.ShapeRange.ScaleWidth 1.98, msoFalse, msoScaleFromTopLeft Selection.ShapeRange.ScaleHeight 2.7, msoFalse, msoScaleFromTopLeft + сам разобрался: X++: comShape = comComment.Shape(); comTextFrame = comShape.TextFrame(); comTextFrame.AutoSize(1); Последний раз редактировалось Stainless; 26.11.2009 в 03:13. |
|
Теги |
excel, масштаб, программно, com-объект |
|
Опции темы | Поиск в этой теме |
Опции просмотра | |
|