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

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

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

Author24 — интернет-сервис помощи студентам
Помогите пожалуйста, мне надо выборочно ячейки из 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) Есть таблица...

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

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

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

Решение

Ну вот так как-то можно сделать... (Для ХЕ...)
*.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 Кб, 22 просмотров)
2
0 / 0 / 0
Регистрация: 31.08.2014
Сообщений: 5
09.09.2014, 19:24  [ТС] 6
У меня ошибка на этой строке.

C++
1
AddTextInWord("a1", StringGrid1->Cells[3][4]);
Как я поняла что-то с функцией, может поможет, но я делаю в C++RAD Studio 2009
0
85 / 85 / 33
Регистрация: 21.09.2013
Сообщений: 339
09.09.2014, 19:29 7
Юля Новикова, это пользовательская функция. Я думаю ты её не описала.
в 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  [ТС] 8
Точно, сейчас все сделаю, и вечером отпишусь, спасибо =) Вот я слепая.))))
0
0 / 0 / 0
Регистрация: 31.08.2014
Сообщений: 5
12.09.2014, 21:27  [ТС] 9
Столкнулась с такой ошибкой при нажатии на кнопку

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

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

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

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

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

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

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


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

Или воспользуйтесь поиском по форуму:
9
Ответ Создать тему
Блоги программистов
Как перейти с Options API на Composition API в Vue.js
BasicMan 06.01.2025
Почему переход на Composition API актуален В мире современной веб-разработки фреймворк Vue. js продолжает эволюционировать, предлагая разработчикам все более совершенные инструменты для создания. . .
Архитектура современных процессоров
inter-admin 06.01.2025
Процессор (центральный процессор, ЦП) является основным вычислительным устройством компьютера, которое выполняет обработку данных и управляет работой всех остальных компонентов системы. Архитектура. . .
История создания реляционной модели баз данных, правила Кодда
Programming 06.01.2025
Предпосылки создания реляционной модели В конце 1960-х годов компьютерная индустрия столкнулась с серьезными проблемами в области управления данными. Существовавшие на тот момент модели данных -. . .
Полезные поделки на Arduino, которые можно сделать самому
raxper 06.01.2025
Arduino как платформа для творчества Arduino представляет собой удивительную платформу для технического творчества, которая открывает безграничные возможности для создания уникальных проектов. Эта. . .
Подборка решений задач на Python
IT_Exp 06.01.2025
Целью данной подборки является предоставление возможности ознакомиться с различными задачами и их решениями на Python, что может быть полезно как для начинающих, так и для опытных программистов. . . .
С чего начать программировать микроконтроллер­­ы
raxper 06.01.2025
Введение в мир микроконтроллеров Микроконтроллеры стали неотъемлемой частью современного мира, окружая нас повсюду: от простых бытовых приборов до сложных промышленных систем. Эти маленькие. . .
Из чего собрать игровой компьютер
inter-admin 06.01.2025
Сборка игрового компьютера требует особого внимания к выбору комплектующих и их совместимости. Правильно собранный игровой ПК не только обеспечивает комфортный геймплей в современных играх, но и. . .
Обновление сайта www.historian.b­y
Reglage 05.01.2025
Обещал подвести итоги 2024 года для сайта. Однако начну с того, что изменилось за неделю. Добавил краткий урок по последовательности действий при анализе вредоносных файлов и значительно улучшил урок. . .
Как использовать GraphQL в C# с HotChocolate
Programming 05.01.2025
GraphQL — это современный подход к разработке API, который позволяет клиентам запрашивать только те данные, которые им необходимы. Это делает взаимодействие с API более гибким и эффективным по. . .
Модель полного двоичного сумматора с помощью логических операций (python)
AlexSky-coder 04.01.2025
def binSum(x:list, y:list): s=^y] p=x and y for i in range(1,len(x)): s. append((x^y)^p) p=(x and y)or(p and (x or y)) return s x=list() y=list()
Это мы не проходили, это нам не задавали...(аси­­­­­­­­­­­­­­хро­н­н­ы­й счётчик с управляющим сигналом задержки).
Hrethgir 04.01.2025
Асинхронный счётчик на сумматорах (шестиразрядный по числу диодов на плате, но наверное разрядов будет больше - восемь или шестнадцать, а диоды на старшие), так как триггеры прошли тестирование и. . .
Руководство по созданию бота для Телеграм на Python
IT_Exp 04.01.2025
Боты для Телеграм представляют собой автоматизированные программы, которые выполняют различные задачи, взаимодействуя с пользователями через интерфейс мессенджера. В данной статье мы рассмотрим,. . .
КиберФорум - форум программистов, компьютерный форум, программирование
Powered by vBulletin
Copyright ©2000 - 2025, CyberForum.ru