С Новым годом! Форум программистов, компьютерный форум, киберфорум
C++ Builder
Войти
Регистрация
Восстановить пароль
Блоги Сообщество Поиск Заказать работу  
 
Рейтинг 4.91/11: Рейтинг темы: голосов - 11, средняя оценка - 4.91
0 / 0 / 0
Регистрация: 31.08.2014
Сообщений: 5

Вставить ячейки из StringGrid в выборочные строки в Word

31.08.2014, 20:41. Показов 2266. Ответов 8
Метки нет (Все метки)

Студворк — интернет-сервис помощи студентам
Помогите пожалуйста, мне надо выборочно ячейки из StringGrid вставить в выборочные строки в Word. Например, мне надо ячейку с индексами (3,4) в ставить в 5ю строку. все это должно происходить по нажатию на кнопку. Помогите пожалуйста коусовая горит из-за этой проблемы.
0
Лучшие ответы (1)
cpp_developer
Эксперт
20123 / 5690 / 1417
Регистрация: 09.04.2010
Сообщений: 22,546
Блог
31.08.2014, 20:41
Ответы с готовыми решениями:

Вставить изображение в ячейки таблицы Word
Добрый день! В документе Word есть таблица, состоит из 1 строки и двух ячеек. Нужно в каждую ячейку вставить изображение...

StringGrid, как вставить картинку в ячейки последнего столбца, и отловить щелчок по ней?
Народ, помогите!.. Со StringGrid по4ти не работал, а тут по зарез надо! 1) Есть таблица StringGrid1, в ней 4 столбца и 13 рядков. Как...

Вставить определенный текст в пустые ячейки таблицы word, поправить макрос
Добрый день, ребята выручайте! Часа 3 пытаюсь найти не получается. Задача - есть таблица word, нужно вставить текст в каждую пустую...

8
Модератор
 Аватар для D1973
9908 / 6445 / 2455
Регистрация: 21.01.2014
Сообщений: 27,358
Записей в блоге: 3
01.09.2014, 07:17
Вот тут посмотрите, вроде все понятно изложено...
1
0 / 0 / 0
Регистрация: 31.08.2014
Сообщений: 5
01.09.2014, 10:54  [ТС]
Ага спасибки =), я сейчас сяду попробую разобраться. Если кто сможет сделать пример на кнопке, раньше меня буду очень признательна =)
0
 Аватар для demon_7
260 / 192 / 60
Регистрация: 12.05.2013
Сообщений: 857
01.09.2014, 11:12
Если возникнут трудности, просто постите Ваш код с которым проблемы и Вам помогут.
Статья действительно очень детальная...разобраться по ней легко.
1
Модератор
 Аватар для D1973
9908 / 6445 / 2455
Регистрация: 21.01.2014
Сообщений: 27,358
Записей в блоге: 3
01.09.2014, 20:30
Лучший ответ Сообщение было отмечено Юля Новикова как решение

Решение

Ну вот так как-то можно сделать... (Для ХЕ...)
*.h
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
#ifndef Unit1H
#define Unit1H
//---------------------------------------------------------------------------
#include <System.Classes.hpp>
#include <Vcl.Controls.hpp>
#include <Vcl.StdCtrls.hpp>
#include <Vcl.Forms.hpp>
#include <Vcl.Grids.hpp>
//---------------------------------------------------------------------------
class TForm1 : public TForm
{
__published:    // IDE-managed Components
    TStringGrid *StringGrid1;
    TButton *Button1;
    void __fastcall FormCreate(TObject *Sender);
    void __fastcall Button1Click(TObject *Sender);
private:    // User declarations
    void __fastcall AddTextInWord(String bookmark, String _Text); // <<== Добавляем эту функцию
public:     // User declarations
    __fastcall TForm1(TComponent* Owner);
};
//---------------------------------------------------------------------------
extern PACKAGE TForm1 *Form1;
//---------------------------------------------------------------------------
#endif

*.cpp
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
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
#include <vcl.h>
#pragma hdrstop
#include <ComObj.hpp>
#include "Unit1.h"
//---------------------------------------------------------------------------
#pragma package(smart_init)
#pragma resource "*.dfm"
TForm1 *Form1;
 
Variant vApp, vDocs, vDoc, vSelection;
String Src, Dst;
 
//---------------------------------------------------------------------------
__fastcall TForm1::TForm1(TComponent* Owner)
    : TForm(Owner)
{
}
//---------------------------------------------------------------------------
void __fastcall TForm1::FormCreate(TObject *Sender)
{
//Оформляем внешний вид StringGrid (для демонстрации)
  for(int i = StringGrid1->FixedCols; i < StringGrid1->ColCount; i++)
   StringGrid1->Cells[i][0] = IntToStr(i);
  for(int i = StringGrid1->FixedRows; i < StringGrid1->RowCount; i++)
   StringGrid1->Cells[0][i] = IntToStr(i);
  StringGrid1->Cells[3][4] = "Текст в ячейке [3][4]";
  StringGrid1->Cells[2][3] = "Текст в ячейке [2][3]";
//Указываем имя "шаблона"
  Src = ExtractFilePath(Application->ExeName) + "template.docx";
//Указываем имя нового документа
  Dst = ExtractFilePath(Application->ExeName) + "Doc1.docx";
//Копируем "шаблон" в новый документ
  if(FileExists(Src)) CopyFile(Src.c_str(),Dst.c_str(),false);
}
//---------------------------------------------------------------------------
void __fastcall TForm1::Button1Click(TObject *Sender)
{
  String bName, sText;
//Открываем Word
  try
   {
     vApp=CreateOleObject("Word.Application");
   }
  catch(...)
   {
     MessageBox(0, L"Ошибка при открытии сервера Word", L"Ошибка", MB_OK);
     return;
   }
  vApp.OlePropertySet("Visible",true);
  vDoc = vApp.OlePropertyGet("Documents").OleFunction("Open", WideString(Dst));
  vSelection = vApp.OlePropertyGet("Selection");
//Вставляем текст в первую метку
  AddTextInWord("a1", StringGrid1->Cells[3][4]);
//Вставляем текст во вторую метку
  AddTextInWord("a2", StringGrid1->Cells[2][3]);
}
//---------------------------------------------------------------------------
void __fastcall TForm1::AddTextInWord(String bookmark, String _Text)
{
//Функция вставки текста на место закладок
//Первый параметр - имя метки
//Второй параметр - текст для вставки
  vSelection.OleProcedure("GoTo",(int)-1,0,0,WideString(bookmark));
  vSelection.OlePropertySet("Text", WideString(_Text));
  vSelection.OleProcedure("Collapse", (Variant)0);
}

Идея следующая:
1. Имеется какой-то документ WORD с именем template.docx, который находится рядом с файлом программы. В нем в определенных позициях (на 5-й и 7-й строках) проставлены закладки с именами "a1" и "a2".
2. При старте программы файл template.docx копируется в файл doc1.docx, вся далнейшая работа ведется над копией, сам шаблон не меняется.
3. На форме заполняется StringGrid (для примера заполнил только две ячейки, которые и будут вставлены в документ Ворд)
4. При нажатии на кнопку текст из ячеек переносится на место закладок в документе Ворд.
Вложения
Тип файла: docx template.docx (12.7 Кб, 25 просмотров)
2
0 / 0 / 0
Регистрация: 31.08.2014
Сообщений: 5
09.09.2014, 19:24  [ТС]
У меня ошибка на этой строке.

C++
1
AddTextInWord("a1", StringGrid1->Cells[3][4]);
Как я поняла что-то с функцией, может поможет, но я делаю в C++RAD Studio 2009
0
 Аватар для DeadHipo
85 / 85 / 33
Регистрация: 21.09.2013
Сообщений: 339
09.09.2014, 19:29
Юля Новикова, это пользовательская функция. Я думаю ты её не описала.
в cpp
C++
1
2
3
4
5
6
7
8
9
void __fastcall TForm1::AddTextInWord(String bookmark, String _Text)
{
//Функция вставки текста на место закладок
//Первый параметр - имя метки
//Второй параметр - текст для вставки
  vSelection.OleProcedure("GoTo",(int)-1,0,0,WideString(bookmark));
  vSelection.OlePropertySet("Text", WideString(_Text));
  vSelection.OleProcedure("Collapse", (Variant)0);
}
в h
C++
1
2
3
4
5
6
7
8
9
10
11
12
class TForm1 : public TForm
{
__published:    // IDE-managed Components
    TStringGrid *StringGrid1;
    TButton *Button1;
    void __fastcall FormCreate(TObject *Sender);
    void __fastcall Button1Click(TObject *Sender);
private:    // User declarations
    void __fastcall AddTextInWord(String bookmark, String _Text); // <<== Добавляем эту функцию
public:     // User declarations
    __fastcall TForm1(TComponent* Owner);
};
1
0 / 0 / 0
Регистрация: 31.08.2014
Сообщений: 5
10.09.2014, 11:35  [ТС]
Точно, сейчас все сделаю, и вечером отпишусь, спасибо =) Вот я слепая.))))
0
0 / 0 / 0
Регистрация: 31.08.2014
Сообщений: 5
12.09.2014, 21:27  [ТС]
Столкнулась с такой ошибкой при нажатии на кнопку

Assertion failed: IsBound(), file C:\Builds\TP\emuvcl\utilcls,line 3606.

Сейчас посмотрю что за строка.

Добавлено через 22 часа 47 минут
OlePropertySet(name, static_cast<TAutoArgsBase&>(args));
0
Надоела реклама? Зарегистрируйтесь и она исчезнет полностью.
raxper
Эксперт
30234 / 6612 / 1498
Регистрация: 28.12.2010
Сообщений: 21,154
Блог
12.09.2014, 21:27
Помогаю со студенческими работами здесь

Как вставить выборочные (не все) записи в таблицу
В таблице много полей, но вставить надо лишь несколько... (остальные пропустить, пусть будут пустые) К примеру, в таблице 5 полей: ...

Скопировать содержимое ячейки таблицы Word в буфер обмена и потом вставить его в другую таблицу
Подскажите пожалуйста как скопировать вместимость ячейки таблицы с помощю Делфи в буфер обмена и потом её вставить в другую таблицу? ...

Отрисовка выделенной строки и ячейки в StringGrid
Есть компонент TStringGrid SGLoads. В событии OnDrawCell я выделяю светло-голубым цветом ячейки выделенной строки и темным цветом...

Удаление строки в StringGrid, после проверки 5 ячейки в этой строке
Подскажите, как можно написать условие, чтобы при нажатии на кнопку, программа проверяла каждую строку в StingGrid и если 5 ячейка...

В конце каждой строки ячейки вставить ноль
Как в конце каждой строки ячейки вставить ноль ексель. Не в конце ячейки. А именно в конце строки. Тоесть в одной ячейке несколько строк....


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

Или воспользуйтесь поиском по форуму:
9
Ответ Создать тему
Новые блоги и статьи
WordPad для Windows 11
Jel 10.01.2026
WordPad для Windows 11 — это приложение, которое восстанавливает классический текстовый редактор WordPad в операционной системе Windows 11. После того как Microsoft исключила WordPad из. . .
Classic Notepad for Windows 11
Jel 10.01.2026
Old Classic Notepad for Windows 11 Приложение для Windows 11, позволяющее пользователям вернуть классическую версию текстового редактора «Блокнот» из Windows 10. Программа предоставляет более. . .
Почему дизайн решает?
Neotwalker 09.01.2026
В современном мире, где конкуренция за внимание потребителя достигла пика, дизайн становится мощным инструментом для успеха бренда. Это не просто красивый внешний вид продукта или сайта — это. . .
Модель микоризы: классовый агентный подход 3
anaschu 06.01.2026
aa0a7f55b50dd51c5ec569d2d10c54f6/ O1rJuneU_ls https:/ / vkvideo. ru/ video-115721503_456239114
Owen Logic: О недопустимости использования связки «аналоговый ПИД» + RegKZR
ФедосеевПавел 06.01.2026
Owen Logic: О недопустимости использования связки «аналоговый ПИД» + RegKZR ВВЕДЕНИЕ Введу сокращения: аналоговый ПИД — ПИД регулятор с управляющим выходом в виде числа в диапазоне от 0% до. . .
Модель микоризы: классовый агентный подход 2
anaschu 06.01.2026
репозиторий https:/ / github. com/ shumilovas/ fungi ветка по-частям. коммит Create переделка под биомассу. txt вход sc, но sm считается внутри мицелия. кстати, обьем тоже должен там считаться. . . .
Расчёт токов в цепи постоянного тока
igorrr37 05.01.2026
/ * Дана цепь постоянного тока с сопротивлениями и напряжениями. Надо найти токи в ветвях. Программа составляет систему уравнений по 1 и 2 законам Кирхгофа и решает её. Последовательность действий:. . .
Новый CodeBlocs. Версия 25.03
palva 04.01.2026
Оказывается, недавно вышла новая версия CodeBlocks за номером 25. 03. Когда-то давно я возился с только что вышедшей тогда версией 20. 03. С тех пор я давно снёс всё с компьютера и забыл. Теперь. . .
КиберФорум - форум программистов, компьютерный форум, программирование
Powered by vBulletin
Copyright ©2000 - 2026, CyberForum.ru