Форум программистов, компьютерный форум, киберфорум
C++ Builder
Войти
Регистрация
Восстановить пароль
Блоги Сообщество Поиск Заказать работу  
 
Рейтинг 4.56/9: Рейтинг темы: голосов - 9, средняя оценка - 4.56
 Аватар для AndyHell
5 / 5 / 3
Регистрация: 18.04.2010
Сообщений: 20

Сохранение таблицы в Ecxel

16.01.2011, 00:08. Показов 1822. Ответов 6
Метки нет (Все метки)

Студворк — интернет-сервис помощи студентам
У меня возникла проблема при переносе данных из StringGrid в Ecxel файл

Написал следующий код
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
67
68
69
70
71
72
73
74
void __fastcall TMainForm::SaveTabExecute(TObject *Sender)
{
MakeReport();
}
void TMainForm::MakeReport()
{
    // запускаем Excel
    ExcelInit("");
 
    // записываем в него заголовки
    AnsiString s=TableForm->Data->Cells[0][0];
    toExcelCell(1,1,String(s));
 
    // записываем в него данные
    for(int i=1; i < TableForm->Data->RowCount; i++)
    {
       toExcelCell(i+1, 1, TableForm->Data->Cells[0][i]);
    }
    // делаем его видимым
    if(!App.IsEmpty())App.OlePropertySet("Visible",true);
 
    // сохраняем его на диске в файл MyTest.xls
    try{
      App.OlePropertyGet("WorkBooks",1).OleProcedure("SaveAs","MyTest");
      }catch(...){
         ShowMessage("Не забудьте сохранить сделанные изменения !");
         }
    // освобождаем ресурсы
    Sh.Clear();
    App.Clear();
}
//------------------------------------------------------------------------
 
void __fastcall TMainForm::ExcelInit(String File)
{
  // если Excel запущен - подключиться к нему
  try {
   App=Variant::GetActiveObject("Excel.Application");
  } catch(...) {
     // Excel не запущен - запустить его
     try { App=Variant::CreateObject("Excel.Application"); } catch (...) {
      Application->MessageBox(L"Невозможно открыть Microsoft Excel!"
      L"Возможно Excel не установлен на компьютере.",L"Ошибка",MB_OK | MB_ICONERROR);
  } }
  try {
    if(File!="")
     App.OlePropertyGet("WorkBooks").OleProcedure("Open",File.c_str());
    else
     App.OlePropertyGet("WorkBooks").OleProcedure("add");
 
    Sh=App.OlePropertyGet("WorkSheets",1);
  } catch(...) {
    Application->MessageBox(L"Ошибка открытия книги Microsoft Excel!",L"Ошибка",MB_OK | MB_ICONERROR);
  }
}/* ExcelInit() */
//----------------------------------------------------------------
 
void __fastcall TMainForm::toExcelCell(int Row,int Column, String data)
{
  try {
    Variant  cur = Sh.OlePropertyGet("Cells", Row,Column);
    cur.OlePropertySet("Value", data.c_str());
  } catch(...) { ; }
}/* toExcelCell() */
//------------------------------------------------------------------------
 
void __fastcall TMainForm::toExcelCell(int Row,int Column, Variant data)
{
  try {
    Variant  cur = Sh.OlePropertyGet("Cells", Row,Column);
    cur.OlePropertySet("Value", data);
  } catch(...) { ; }
}/* toExcelCell() */
//---------------------------------------------------------------------------
Проблема в том, что при сохранении обрезаются последние цифры в числах, например если в таблице 12, то в Ecxel файл попадает только 1, у строк тоже обрезаются буквы. Подскажите где я накосячил?

P.S. В Builder 6 этот код замечательно работал, а вот в RAD 2010 вот такая проблема
0
IT_Exp
Эксперт
34794 / 4073 / 2104
Регистрация: 17.06.2006
Сообщений: 32,602
Блог
16.01.2011, 00:08
Ответы с готовыми решениями:

Создание, заполнение и сохранение таблицы в C++
Здравствуйте! Как создать таблицу Word 2007 в C++ Builder Enterprise v6.0 с заданным количеством столбцов, заполнить данными и сохранить в...

Сохранение таблицы в файл Как????
Всем привет!!!! Сталкнулся с такой задачей: Имею набор данных - сумма, фио, адресс, счет эти данные нужно сохранить в таком виде...

Сохранение таблицы StringGrid в картинку
Добрый день уважаемые форумчани , у меня возник вопрос по сохранению таблицы StringGrid в формат jpg например. После сохранение я буду...

6
0 / 0 / 0
Регистрация: 20.09.2011
Сообщений: 3
20.09.2011, 15:14
Нашелся ответ на этот вопрос? меня этот вопрос тоже очень интересует, не знаю где ответ найти.
0
1497 / 1238 / 245
Регистрация: 04.04.2011
Сообщений: 4,363
20.09.2011, 15:17
Юникод ?
0
0 / 0 / 0
Регистрация: 20.09.2011
Сообщений: 3
21.09.2011, 09:39
да юникод

Добавлено через 2 часа 49 минут
Подскажите пожалуйста что делать, тоже при вставке данных в excel отрезает конец строки.
вот так вставляю :
C++
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
//отчет EXCEL
int k, n=7, metka=0;
Variant range;
AnsiString SaveName ="";
AnsiString Formula ="";
UnicodeString d,sv;
DT=FormatDateTime("dd.mm.yyyy",Now());
 
Variant V, VSheet, VCell;
 
ExcelInit("");
toExcelCell(1,1,String(L"Акт от ")+DateToStr(DT)+String("г."));
toExcelCell(2,1,String(L"сведения о показаниях счетчиков"));
toExcelCell(4,4,String(L"Показания счетчика"));
toExcelCell(4,8,String(L"Разность показаний"));
ну и т.д.
0
 Аватар для cpp_developer
20124 / 5691 / 417
Регистрация: 09.04.2010
Сообщений: 22,546
Записей в блоге: 1
21.09.2011, 10:45
1. где юникод - в билдере, в екселе ?
2. какой кусок отрезает - покажите обрезаную строку?
3. всегда давайте мксимум известного вам - у большинства нет ни времени, ни желания гадать, что там у вас получается/не получается.

может, ему не AnsiString , а UnicodeString подсунуть надо
0
0 / 0 / 0
Регистрация: 20.09.2011
Сообщений: 3
21.09.2011, 13:09
Юникод в билдере, отрезает ровно половину, печатает первую половину строки, вместо "показания счетчика" в excel выйдет только "показания".
0
 Аватар для cpp_developer
20124 / 5691 / 417
Регистрация: 09.04.2010
Сообщений: 22,546
Записей в блоге: 1
21.09.2011, 15:47
конвертировать перед занесением в ексель не пробовли ? типа
C++
1
2
UnicodeString u_str;
AnsiString a_str = (AnsiString)u_str;
ну и тут:
ANSI и UNICODE
Перевести Unicode строку в ANSI
0
Надоела реклама? Зарегистрируйтесь и она исчезнет полностью.
BasicMan
Эксперт
29316 / 5623 / 2384
Регистрация: 17.02.2009
Сообщений: 30,364
Блог
21.09.2011, 15:47
Помогаю со студенческими работами здесь

Сохранение содержимого таблицы в Word
Добрый день, делаю сохранение содержимого таблицы в Word, рад выдаёт ошибку, вордовский документ создается но пустой. Мне нужно...

StringGrid Сохранение в файл в виде таблицы
Здравствуйте! Подскажите пожалуйста, как сохранять из StringGrid в текстовый файл, чтобы в тхт файле был такой же вид таблицы, как...

StringGrid Сохранение в файл в виде таблицы ( через - и | )
Здравствуйте! Подскажите пожалуйста, как сохранять из StringGrid в текстовый файл, чтобы в тхт файле был такой же вид таблицы, как...

Сохранение содержимого таблицы в текстовый файл
Всем здравствуйте. Помогите пожалуйста, ситуация такая: есть база данных, нужно чтобы при нажатии на кнопочку, содержимое базы...

Создать модуль в VBA Ecxel, в котором написать вывод произвольной матрицы на лист Ecxel
Добрый вечер. Помогите, пожалуйста. Нужно создать модуль в VBA Ecxel, в котором написать вывод произвольной матрицы на лист Ecxel, где...


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

Или воспользуйтесь поиском по форуму:
7
Ответ Создать тему
Новые блоги и статьи
Отображение реквизитов в документе по условию и контроль их заполнения
Maks 04.04.2026
Алгоритм из решения ниже реализован на примере нетипового документа "ПланированиеСпецтехники", разработанного в конфигурации КА2. Данный документ берёт данные из другого нетипового документа. . .
Фото всей Земли с борта корабля Orion миссии Artemis II
kumehtar 04.04.2026
Это первое подобное фото сделанное человеком за 50 лет. Снимок называют новым вариантом легендарной фотографии «The Blue Marble» 1972 года, сделанной с борта корабля «Аполлон-17». Новое фото. . .
Вывод диалогового окна перед закрытием, если документ не проведён
Maks 04.04.2026
Алгоритм из решения ниже реализован на примере нетипового документа "СписаниеМатериалов", разработанного в конфигурации КА2. Задача: реализовать программный контроль на предмет проведения документа. . .
Программный контроль заполнения реквизита табличной части документа
Maks 02.04.2026
Алгоритм из решения ниже реализован на примере нетипового документа "СписаниеМатериалов", разработанного в конфигурации КА2. Задача: реализовать контроль заполнения реквизита "ПричинаСписания". . .
wmic не является внутренней или внешней командой
Maks 02.04.2026
Решение: DISM / Online / Add-Capability / CapabilityName:WMIC~~~~ Отсюда: https:/ / winitpro. ru/ index. php/ 2025/ 02/ 14/ komanda-wmic-ne-naydena/
Программная установка даты и запрет ее изменения
Maks 02.04.2026
Алгоритм из решения ниже реализован на примере нетипового документа "СписаниеМатериалов", разработанного в конфигурации КА2. Задача: при создании документов установить период списания автоматически. . .
Вывод данных в справочнике через динамический список
Maks 01.04.2026
Реализация из решения ниже выполнена на примере нетипового справочника "Спецтехника" разработанного в конфигурации КА2. Задача: вывести данные из ТЧ нетипового документа. . .
Программное заполнения текстового поля в реквизите формы документа
Maks 01.04.2026
Алгоритм из решения ниже реализован на нетиповом документе "ВыдачаОборудованияНаСпецтехнику" разработанного в конфигурации КА2, в дополнении к предыдущему решению. На форме документа создается. . .
КиберФорум - форум программистов, компьютерный форум, программирование
Powered by vBulletin
Copyright ©2000 - 2026, CyberForum.ru