Форум программистов, компьютерный форум, киберфорум
C++ Builder
Войти
Регистрация
Восстановить пароль
 
Рейтинг 4.57/7: Рейтинг темы: голосов - 7, средняя оценка - 4.57
0 / 0 / 0
Регистрация: 05.06.2015
Сообщений: 9
1

Закладки в word, открытие excel-файла

18.06.2015, 11:00. Просмотров 1324. Ответов 10
Метки нет (Все метки)

1. Пытаюсь заполнить вордовский файл, используя закладки( то есть в готовом файле, напротив возле "ФИО" написать ФИО, например), код написал вот такой, на выделенной строчке выдает ошибку. В чем может быть дело? Находил похожие решения на форумах, у всех, вроде, работало

C++
1
2
3
4
5
6
7
8
9
WordApp=CreateOleObject("Word.Application");
  Docs=WordApp.OlePropertyGet("Documents");
  Docs.OleProcedure("Add", "C:\\z.doc");
  Doc=Docs.OleFunction("Item",1);
  Doc.OleProcedure("Activate");
  WordApp.OlePropertySet("Visible",true);
  Bookmarks=Doc.OlePropertyGet("Bookmarks");
  Bookmark=vBookmarks.OleFunction("Item","ФИО");//вот на этой
  Bookmark.OlePropertyGet("Range").OlePropertySet("Text","текст");
2. Как можно открыть файл из текущей директории? Пробовал по-разному, типы String и AnsiString, не получается никак, на все варианты ругается.
C++
1
2
vVarBooks.OleProcedure("Open", curdir.c_str());
vVarBooks.OleProcedure("Open", StringToOleStr(curdir));
0
Programming
Эксперт
94731 / 64177 / 26122
Регистрация: 12.04.2006
Сообщений: 116,782
18.06.2015, 11:00
Ответы с готовыми решениями:

Передача данных из Excel в Word (через Закладки) из нескольких страниц Excel
Товарищи прошу помощи! В книге есть 3 закладки: Org - данные об организации (только 1 строчка...

Построчный перенос данных из ячеек Excel в закладки Word
Добрый день, уважаемые форумчане! :) Помогите, пожалуйста, не смогла найти решения поставленной...

Определения наличия закладки в документе WORD из скрипта Excel
Доброе время суток уважаемый All, Пишу тут для ОК скриптик который будет в шаблонных документах...

Открытие Word'а из прогрaммы Excel
Здравствуйте, скажите как можно открыть doc файл из программы написанной в Excel таким образом что...

10
Модератор
6566 / 4204 / 1817
Регистрация: 21.01.2014
Сообщений: 17,628
Записей в блоге: 3
18.06.2015, 11:38 2
C++
1
2
Bookmark=vBookmarks.OleFunction("Item",WideString("ФИО"));
  Bookmark.OlePropertyGet("Range").OlePropertySet("Text",WideString("текст"));
Добавлено через 4 минуты
По второму вопросу
C++
1
2
String currdir = ExtractFilePath(Application->ExeName) + "Имя твоего файла";
vVarBooks.OleProcedure("Open", WideString(currdir));
0
Супер-модератор
Эксперт Pascal/DelphiАвтор FAQ
30602 / 19973 / 7803
Регистрация: 22.10.2011
Сообщений: 34,784
Записей в блоге: 6
18.06.2015, 11:40 3
1)
C++
1
2
3
4
5
6
7
8
9
    WordApp = CreateOleObject("Word.Application");
    Docs = WordApp.OlePropertyGet("Documents");
    Docs.OleProcedure("Add", WideString("D:\\test\\01.doc"));
    Doc = Docs.OleFunction("Item", 1);
    Doc.OleProcedure("Activate");
    WordApp.OlePropertySet("Visible", true);
    vBookmarks = Doc.OlePropertyGet("Bookmarks");
    Bookmark = vBookmarks.OleFunction("Item", WideString(L"ФИО")); // вот на этой
    Bookmark.OlePropertyGet("Range").OlePropertySet("Text", WideString(L"текст"));
Никаких вылетов

2) Как заполняется curdir?

Добавлено через 59 секунд
Цитата Сообщение от D1973 Посмотреть сообщение
WideString("текст")
Не привязывайся к русскому. Это НЕ ЕДИНСТВЕННЫЙ язык в мире, как бы вам этого не хотелось.
1
Модератор
6566 / 4204 / 1817
Регистрация: 21.01.2014
Сообщений: 17,628
Записей в блоге: 3
18.06.2015, 11:47 4
Точно, я всегда про этот L забываю, пока компилятор не обругает...
0
0 / 0 / 0
Регистрация: 05.06.2015
Сообщений: 9
18.06.2015, 12:03  [ТС] 5
Никаких вылетов
Попробовал с WideString, ничего не изменилось. Ошибка "Project raised exception class EOleSysError with message "Ошибка"".

2) Как заполняется curdir?
Пробовал так:
String curdir = GetCurrentDir();
String curdir1=curdir + "z.doc";

И как D1973 посоветовал пробовал, тоже не получается.
0
Модератор
6566 / 4204 / 1817
Регистрация: 21.01.2014
Сообщений: 17,628
Записей в блоге: 3
18.06.2015, 12:11 6
Показывай код. Если делал так, как показано - проблем быть не должно.
0
0 / 0 / 0
Регистрация: 05.06.2015
Сообщений: 9
18.06.2015, 12:13  [ТС] 7
Показывай код. Если делал так, как показано - проблем быть не должно.
Вот проект
0
Вложения
Тип файла: rar test.rar (3.83 Мб, 5 просмотров)
0 / 0 / 0
Регистрация: 05.06.2015
Сообщений: 9
18.06.2015, 12:18  [ТС] 8
Там кое-где вместо WideString StringToOleStr, это я уже перебирал варианты
0
Модератор
6566 / 4204 / 1817
Регистрация: 21.01.2014
Сообщений: 17,628
Записей в блоге: 3
18.06.2015, 13:21 9
Вот что у тебя в программе написано
C++
1
String currdir = ExtractFilePath(Application->ExeName) + "bd.xls";
Ты понимаешь, что эта запись делает? Берет путь к исполняемому файлу твоего проекта (project1.exe) и добавляет к этому пути имя екселевского файла. Все бы ничего, но
1. Где у тебя находится ехе-шник? Правильно, в папке Debug. А где екселевский файл? Да где угодно, но только не там. Положи их рядом с друг другом
2. Ты пробуешь открывать файл bd.xls. А какой файл у тебя реально? Правильно, bd.xlsх
Вот исправь эти 2 косяка, и твой обработчик будет выглядеть так
C++
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
if(!fStart)
 {
  try
  {
   vVarApp=CreateOleObject("Excel.Application");
   fStart=true;
  }
  catch(...)
  {
   MessageBox(0, "Ошибка при открытии сервера Excel", "Ошибка", MB_OK);
  return;
  }
 }
vVarApp.OlePropertySet("Visible",true);
vVarBooks = vVarApp.OlePropertyGet("Workbooks");
String currdir = ExtractFilePath(Application->ExeName) + "bd.xlsх";
vVarBooks.OleProcedure("Open", WideString(currdir));
vVarBook   = vVarBooks.OlePropertyGet("Item",1);
vVarSheets = vVarBook.OlePropertyGet("Worksheets");
vVarSheet  = vVarSheets.OlePropertyGet("Item",1);
vVarSheet.OleProcedure("Activate");
 
for(int i=0; i<50; i++)
{
vVarCell=vVarSheet.OlePropertyGet("Cells").OlePropertyGet("Item",10, 1+i);
vVarCell.OlePropertySet("Value",WideString(Edit1->Text));
}
Добавлено через 1 минуту
и да, зачем там у тебя объявлено Variant v, если эта v нигде не используется?
0
0 / 0 / 0
Регистрация: 05.06.2015
Сообщений: 9
18.06.2015, 13:46  [ТС] 10
Спасибо, заработало. Невнимательность меня убьет.

А что с другой проблемой?

и да, зачем там у тебя объявлено Variant v, если эта v нигде не используется?
Использовалась, но потом убрал. Проект для отлаживания некоторых вещей просто.
0
Модератор
6566 / 4204 / 1817
Регистрация: 21.01.2014
Сообщений: 17,628
Записей в блоге: 3
18.06.2015, 14:37 11
1. Как и в предыдущем случае, документ должен лежать рядом с ехе-шником
2. В самом документе у тебя нет никаких закладок. Я добавил в него закладку с именем z1 (имена закладок лучше делать английскими - проблем меньше будет) рядом с текстом ФИО. Текст закладки берется из Едит1
Вот такой вот код
C++
1
2
3
4
5
6
7
8
9
10
WordApp=CreateOleObject("Word.Application");
Document=WordApp.OlePropertyGet("Documents");
String currdir = ExtractFilePath(Application->ExeName) + "z.doc";
Document.OleProcedure("Add", WideString(currdir));
Doc=Document.OleFunction("Item",1);
Doc.OleProcedure("Activate");
WordApp.OlePropertySet("Visible",true);
vBookmarks=Doc.OlePropertyGet("Bookmarks");
Bookmark = vBookmarks.OleFunction("Item", WideString(L"z1"));
Bookmark.OlePropertyGet("Range").OlePropertySet("Text", WideString(Edit1->Text));
1
IT_Exp
Эксперт
87844 / 49110 / 22898
Регистрация: 17.06.2006
Сообщений: 92,604
18.06.2015, 14:37

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

Открытие Word из Excel и Поверх всех окон
Здравствуйте. Собственно сабж. Чего-то ничего путнего в инете найти не могу. На форуме нашёл...

Открытие документа Word с форматированием - макросом из Excel
Народ такой вопрос есть макрос под EXCEL открывающий word документ, копирует содержимое и...

Открытие диалогового окна Word в документе Excel
Здравствуйте! Надеюсь на отзывчивых людей)) Задача следующая: Открыть excel и там же с помощью...

Открытие документа Word из Excel с использованием диалогового окна
Здравствуйте. Столкнулся с такой проблемой: не получается написать макрос который после запуска из...

Открытие Word файла
Здраствуйте. Вот что б открыть тхт в richTextBox1 OpenFileDialog ofd = new OpenFileDialog(); ...

Копирование и открытие файла Word
Народ прошу помощи!)) Мне нужно открыть файлы хранящиеся в папке на сайте. Я создаю временную...


Искать еще темы с ответами

Или воспользуйтесь поиском по форуму:
11
Ответ Создать тему
Опции темы

КиберФорум - форум программистов, компьютерный форум, программирование
Powered by vBulletin® Version 3.8.9
Copyright ©2000 - 2021, vBulletin Solutions, Inc.