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

Импорт из Excel в StringGrid через OpenDialog

08.06.2014, 18:10. Показов 3241. Ответов 3
Метки нет (Все метки)

Студворк — интернет-сервис помощи студентам
В приложении нужно данные из Excel импортировать в StringGrid. Код вроде как нашёл, но везде, где находил, путь к файлу прописывается непосредственно в коде, а хочется через OpenDialog всё-таки. Вот что нашёл на этом же форуме в другой теме по этому поводу:
C++
1
2
3
Excel=CreateOleObject("Excel.Application");
Book=Excel.OlePropertyGet("Workbooks").OlePropertyGet("Open", OpenDialog1->FileName.c_str() );
Sheet=Book.OlePropertyGet("Worksheets", 1);
Но всё равно, на путь к файлу ругается и не открывает. Буду рад помощи.
0
Лучшие ответы (1)
IT_Exp
Эксперт
34794 / 4073 / 2104
Регистрация: 17.06.2006
Сообщений: 32,602
Блог
08.06.2014, 18:10
Ответы с готовыми решениями:

Загрузить данные из файла Excel в StringGrid через OpenDialog
Доброго времени суток! Нужно загрузить данные из Excel файла в StringGrid через OpenDialog. Из StringGrid в Excel получилось...

Импорт 3Д Модели Через OpenDialog-Рад Студио
Импортирую 3D модель через opendialog кодом: void __fastcall TForm2::Button1Click(TObject *Sender) { OpenDialog1->Execute(); ...

Считывание txt в StringGrid через OpenDialog
Вечер добрый, начал делать прогу и что то застрял. Задача такая: нужно сделать считывания таблицы из txt(таблица 5*5 без заголовков) файла...

3
0 / 0 / 0
Регистрация: 08.06.2014
Сообщений: 16
08.06.2014, 18:33
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
void __fastcall TForm1::sButton5Click(TObject *Sender)
{
// открытие файла .xls
if(sOpenDialog1->Execute())// если sOpenDialog1 выполняеться
{
int i,j,ii,jj; // объявляем переменные
Variant var_Excel, var_Sheet;// объявляем переменные
int Row_Counter=0 , Column_Counter=0  ; //объявляем переменные и задаем значения
 
var_Excel=CreateOleObject("Excel.Application");// Создать новый обьект Эксель.
// Получить доступ к книгам Экселя.  Открыть файл в Экселя.
var_Excel.OlePropertyGet("Application").OlePropertyGet("Workbooks").OleProcedure("Add" ,sOpenDialog1->FileName.c_str() );
var_Excel.OlePropertySet("Visible",false);// Сделать его невидимым
var_Sheet = var_Excel.OlePropertyGet("ActiveSheet");
sProgressBar1->Max=StringGrid1->RowCount; // максимальное значение  строки загрузки  равно кол-ву строк
for (Row_Counter ; Row_Counter <= StringGrid1->RowCount ; Row_Counter++)
    { sProgressBar1->Position=Row_Counter; //позиция строки загрузки равна строкам
      for (Column_Counter ; Column_Counter <=StringGrid1-> ColCount ; Column_Counter++)
          {
           StringGrid1->Cells[Column_Counter][Row_Counter] =
               var_Sheet.OlePropertyGet("Cells").OlePropertyGet("Item", Row_Counter + 1 , Column_Counter + 1);
          }
           Column_Counter=0;
        }
var_Excel.OlePropertyGet("Application").OleProcedure("Quit");// выходим из екселя
var_Sheet = Unassigned; //очищаем выделенную память
var_Excel = Unassigned;  //очищаем выделенную память
}
}
//---------------------------------------------------------------------------
void __fastcall TForm1::sButton6Click(TObject *Sender)
{ // открытия файла формата .xls и перенос данных из StringGrid1 в ексель
 
    String Range; // объявляем переменные
    Variant A(OPENARRAY(int, (0, StringGrid1->ColCount)), varVariant);// объявляем переменные
    Variant XL, v0, v1; // объявляем переменные
 
 
 
    XL = CreateOleObject("Excel.Application"); // Создать новый обьект Эксель.
    XL.OlePropertySet("Visible", sCheckBox1->Checked);// видимость  sCheckBox
    v0 = XL.OlePropertyGet("Workbooks");// Получить доступ к книгам Экселя.
    v0.OleProcedure("Add");// открытие екселя
    v1 = v0.OlePropertyGet("Item", 1).OlePropertyGet("Worksheets").OlePropertyGet("Item", 1);//выбираем ячейку
    for (int i = 0; i < StringGrid1->RowCount; i++) {
       for (int j = 0; j < StringGrid1->ColCount; j++)
       {
            A.PutElement(StringGrid1->Cells[j][i],j);
        }
       Range.printf("A%d:J%d", i+1, i+1);
 
       v1.OlePropertyGet("Range", Range.c_str()).OlePropertySet("Value", A);//перенос таблицы в ексель
  }
    XL.OlePropertySet("DisplayAlerts",false);
   //XL.OlePropertyGet("Workbooks").OlePropertyGet("Item",1).OleProcedure("SaveAs", ChangeFileExt(Application->ExeName, ".xls"));
    //XL.OleProcedure("Quit");
 
 
 
 
}
0
Супер-модератор
Эксперт Pascal/DelphiАвтор FAQ
 Аватар для volvo
33149 / 21441 / 8223
Регистрация: 22.10.2011
Сообщений: 36,771
Записей в блоге: 9
09.06.2014, 00:55
Лучший ответ Сообщение было отмечено volvo как решение

Решение

C++
1
2
3
4
5
6
7
    if (OpenDialog1->Execute())
    {
        Excel = CreateOleObject("Excel.Application");
        Book = Excel.OlePropertyGet("Workbooks").OlePropertyGet("Open", WideString(OpenDialog1->FileName.c_str()));
        Sheet = Book.OlePropertyGet("Worksheets", 1);
        // ...
    }
Прекрасно отработало только что. Сколько еще раз надо повторить: "Работаем с OLE через WideString", чтобы наконец это стало понятно?
2
0 / 0 / 0
Регистрация: 11.03.2014
Сообщений: 5
16.06.2014, 01:24  [ТС]
UI, большое спасибо, заработало! К сожалению до этого не работал с OLE, поэтому не знаю всех тонкостей =)
0
Надоела реклама? Зарегистрируйтесь и она исчезнет полностью.
BasicMan
Эксперт
29316 / 5623 / 2384
Регистрация: 17.02.2009
Сообщений: 30,364
Блог
16.06.2014, 01:24
Помогаю со студенческими работами здесь

Занесение базы данных в StringGrid через OpenDialog
Как занести базу данных Access в StringGrid через OpenDialog? И как сохранить через SaveDialog?

Как записать данные в StringGrid через OpenDialog из файла?
Доброго времени суток! Как записать данные в StringGrid через OpenDialog из файла? Есть кнопка сохранения с кодом: Перековыривал на...

Импорт из StringGrid в Excel
Здравствуйте! Я выделила столбец, который нужно заполнить: Cell=Sheet.OlePropertyGet(&quot;Range&quot;,&quot;D2:D201&quot;); ...

Импорт из Excel в StringGrid
может кто кинуть код, как импортировать значения из ексель в стринггрид. моя задача объявить переменную со значениями из екселевского...

Импорт даных с Excel в StringGrid
Прошу помощи, потому что в Делфи не очень разбираюсь .. но кое-что пробую делать .. Нашел код, который позволяет сохранить данные с...


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

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

Новые блоги и статьи
50 самых полезных примеров кода Python для частых задач
py-thonny 17.06.2025
Эффективность работы разработчика часто измеряется не количеством написаных строк, а скоростью решения задач. Готовые сниппеты значительно ускоряют разработку, помогают избежать типичных ошибок и. . .
C# и продвинутые приемы работы с БД
stackOverflow 17.06.2025
Каждый . NET разработчик рано или поздно сталкивается с ситуацией, когда привычные методы работы с базами данных превращаются в источник бессонных ночей. Я сам неоднократно попадал в такие ситуации,. . .
Angular: Вопросы и ответы на собеседовании
Reangularity 15.06.2025
Готовишься к техническому интервью по Angular? Я собрал самые распространенные вопросы, с которыми сталкиваются разработчики на собеседованиях в этом году. От базовых концепций до продвинутых. . .
Архитектура Onion в ASP.NET Core MVC
stackOverflow 15.06.2025
Что такое эта "луковая" архитектура? Термин предложил Джеффри Палермо (Jeffrey Palermo) в 2008 году, и с тех пор подход только набирал обороты. Суть проста - представьте себе лук с его. . .
Unity 4D
GameUnited 13.06.2025
Четырехмерное пространство. . . Звучит как что-то из научной фантастики, правда? Однако для меня, как разработчика со стажем в игровой индустрии, четвертое измерение давно перестало быть абстракцией из. . .
SSE (Server-Sent Events) в ASP.NET Core и .NET 10
UnmanagedCoder 13.06.2025
Кажется, Microsoft снова подкинула нам интересную фичу в новой версии фреймворка. Работая с превью . NET 10, я наткнулся на нативную поддержку Server-Sent Events (SSE) в ASP. NET Core Minimal APIs. Эта. . .
С днём независимости России!
Hrethgir 13.06.2025
Решил побеседовать, с утра праздничного дня, с LM о завоеваниях. То что она написала о народе, представителем которого я являюсь сам сначала возмутило меня, но дальше только смешило. Это чисто. . .
Лето вокруг.
kumehtar 13.06.2025
Лето вокруг. Наполненное бурями и ураганами событий. На фоне магии Жизни, священной и вечной, неумелой рукой человека рисуется панорама душевного непокоя. Странные серые краски проникают и. . .
Популярные LM модели ориентированы на увеличение затрат ресурсов пользователями сгенерированного кода (грязь -заслуги чистоплюев).
Hrethgir 12.06.2025
Вообще обратил внимание, что они генерируют код (впрочем так-же ориентированы разработчики чипов даже), чтобы пользователь их использующий уходил в тот или иной убыток. Это достаточно опытные модели,. . .
Топ10 библиотек C для квантовых вычислений
bytestream 12.06.2025
Квантовые вычисления - это та область, где теория встречается с практикой на границе наших знаний о физике. Пока большая часть шума вокруг квантовых компьютеров крутится вокруг языков высокого уровня. . .
КиберФорум - форум программистов, компьютерный форум, программирование
Powered by vBulletin
Copyright ©2000 - 2025, CyberForum.ru