0 / 0 / 0
Регистрация: 31.08.2014
Сообщений: 5
1

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

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

Author24 — интернет-сервис помощи студентам
Помогите пожалуйста, мне надо выборочно ячейки из StringGrid вставить в выборочные строки в Word. Например, мне надо ячейку с индексами (3,4) в ставить в 5ю строку. все это должно происходить по нажатию на кнопку. Помогите пожалуйста коусовая горит из-за этой проблемы.
0
Лучшие ответы (1)
Programming
Эксперт
94731 / 64177 / 26122
Регистрация: 12.04.2006
Сообщений: 116,782
31.08.2014, 20:41
Ответы с готовыми решениями:

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

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

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

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

8
Модератор
9611 / 6218 / 2423
Регистрация: 21.01.2014
Сообщений: 26,521
Записей в блоге: 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
Модератор
9611 / 6218 / 2423
Регистрация: 21.01.2014
Сообщений: 26,521
Записей в блоге: 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
IT_Exp
Эксперт
87844 / 49110 / 22898
Регистрация: 17.06.2006
Сообщений: 92,604
12.09.2014, 21:27
Помогаю со студенческими работами здесь

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

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

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

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


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

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

КиберФорум - форум программистов, компьютерный форум, программирование
Powered by vBulletin
Copyright ©2000 - 2024, CyberForum.ru