• 15 апреля стартует «Курс «SQL-injection Master» ©» от команды The Codeby

    За 3 месяца вы пройдете путь от начальных навыков работы с SQL-запросами к базам данных до продвинутых техник. Научитесь находить уязвимости связанные с базами данных, и внедрять произвольный SQL-код в уязвимые приложения.

    На последнюю неделю приходится экзамен, где нужно будет показать свои навыки, взломав ряд уязвимых учебных сайтов, и добыть флаги. Успешно сдавшие экзамен получат сертификат.

    Запись на курс до 25 апреля. Получить промодоступ ...

1c+word

  • Автор темы kaa
  • Дата начала
K

kaa

Господа ни у кого нет справочного материала по связи 1с с Word, а то работать методом научного тыка устал.
Заранее спасибо!
 
V

vitfil

Собственно, лучше чем справка по VBA еще ничего не придумано.
 
K

kaa

Это-то понятно да задолбаешся переиначивать что б 1с поняла
 
J

jcnby

Запуск приложения:
Код:
Word=СоздатьОбъект("Word.Application");

Код:
//Видимость его
Word.Visible=1;
//добавляем новый док
Word.Documents.Add();
//активный док
Док=Word.ActiveDocument();
//Добавить параграф
Док.Paragraphs.Add();
//добавление текста
Док.Paragraphs(НомерПараграпха).Range().InsertAfter(Текст);
//оформление (как в ворде задано - так и передаем)
Док.Paragraphs(НомерПраграфа).Range().Style="Заголовок 2";
//откроем док
Word.Documents.Open(ИмяФайло);
//сохранить, сохранить как
Док.Save();
Док.SaveAs(ИмяФайло);
//закрыть
Док.Close();
//выйти из приложения
Word.Quit();

Код:
//Создание дока на основе шаблонки:
Word.Documents.Add("C:\Templates\Shablonis4e.dot");
//Пригаем по открытым докам (Item(Номер Дока по мере открывания, начинается с 1))
Word.Documents.Item(1).Activate();
Word.Documents.Item(2).Activate();
Word.Documents.Item(3).Activate();

//Печатаем:
Word.ActiveDocument.PrintOut();

Вставка текста в док:
//3 способа, 
//1: Указать начальный и конечный симлолы диапазона
rng=Word.ActiveDocument.Range(2,4)
//2: указать номер обзатса
Rng=Word.ActiveDocument.Paragraphs.Item(1).Range;
//3: несколько подряд обзатсоф ( на примере с 3-го по 5-й)
Rng=Word.ActiveDocument.Range(Word.ActiveDocument.Paragraphs.Item(3).Range.Start
, Word.ActiveDocument.Paragraphs.Item(5).Range.End);
//непосредственно вставка текста
Rng.InsertAfter("Текст");

//InsertBefore -вставить перед, InsertAfter -после

А если нада заменить выделенный Текст???? не беда!!!
//признак замены (важный ксты!)
Word.Application.Options.ReplaceSelection=1;
//Выделенный фрагмент (получаем)
Sel=Word.Application.Selection;
//заменяем на текст
Sel.TypeText("Текст");
//делаем окончание абзацсу
Sel.TypeParagraph();

//полужирный шрифт
Sel.Font.Bolt=1;
//отменим его
Sel.Font.Bolt=0;

//рекомендую просто сделать цикл на просмотр свойств Selection и Font  (для форматирования текста)зы: пример построения цикла есть в теме про 1c+Mlx

Код:
Док.Tables.Add(Док.Paragraphs(Номер).Range(),4,4)
Таб=Док.Tables(Док.Tables.Count());
Таб.Cell(1,1).Range().InsertAfter("текст");
 
K

kaa

Есть конкретный вопрос как вывести сформированый документ на передний план Activate - непрокатывает
 
J

jcnby

Код:
Док=Word.ActiveDocument();
- покажет какой док активен
а Activate:
Код:
Word.Documents.Item(1).Activate();
- перейдет на созданный документ( на первый созданный в данном случае, Item(2) -на второй созданный и т.д.
Код:
Word.Visible=1;
- сделает видимым
должно все работать...
 
J

jcnby

шас затестим........( возможно предыдущее приложение Word не закрыл? посмотри в Диспетчере Задач - чтобы в процессах он не висел- это может помешать открытию)
 
K

kaa

Не а , в диспечере всё чики пуки



Вот что еще - может кому пригадится:

Обращение к таблице и ячейке
Код:
TT = Document.Tables(1); //первая таблица
TT.Columns(1).Cells(1).Range.Text;//первая колонка первая ячейка
а можно так
Код:
Document.Tables().Item(2).Cell(1,3).Range.Text;

обращение к границам в данном случае делаем невидимой
Код:
TT.Borders(1).LineStyle = 0;//верхняя
TT.Borders(2).LineStyle = 0;//левая
TT.Borders(3).LineStyle = 0;//нижняя
TT.Borders(4).LineStyle = 0;//правая
ТT.Borders(5).LineStyle = 0;//горизонтальная
ТT.Borders(6).LineStyle = 0;//вертикальная
 
J

jcnby

Word.Visible=1;
после него не ставь: Word.Quit();(автоматом закроет приложение и всю видимость) и Док.Close() (закроет Документ) и не даст посмотреть;
Тогда При нормальном коде прилождение будет закрываться при закрытии ворда - при видимых документов! Для невидимых - пользуемся Quit i Close;
 
K

kaa

после него не ставь: Word.Quit();(автоматом закроет приложение и всю видимость) и Док.Close() (закроет Документ) и не даст посмотреть;
Таких команд у меня нет. Документ открывается просто хотелось чтоб он был так сказать на переднем плане
 
J

jcnby

Цитата(jcnby @ 24:03:2008 - 19:12)
после него не ставь: Word.Quit();(автоматом закроет приложение и всю видимость) и Док.Close() (закроет Документ) и не даст посмотреть;

Таких команд у меня нет. Документ открывается просто хотелось чтоб он был так сказать на переднем плане

я тебя не понимаю....... т.е. у тебя 3 открытых Документа ...и среди них ты хочешь программно переключаться ? тогда вам к win32 :)
 
Мы в соцсетях:

Обучение наступательной кибербезопасности в игровой форме. Начать игру!