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

Как добавить в первый столбец порядковый номер строки? (Excel)

23.08.2022, 16:59. Показов 9802. Ответов 8
Метки нет (Все метки)

Студворк — интернет-сервис помощи студентам
Здравствуйте.

Подскажите как добавить в первый столбец порядковый номер строки?

Добавлять данные в ячейки происходит с второго столбца
C++
1
 Rang = sheet.OlePropertyGet("Range",sheet.OlePropertyGet("Cells",4,1), .......
Вот весь код:
Кликните здесь для просмотра всего текста
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
String DatesTimes = Now().FormatString("DDMMYYYYhhmmss");
String fTPL,fXLS;
 
    fTPL = ExtractFilePath(Application->ExeName) +"RepShablon\\export_dev_f1.xlsx";
 
  fXLS = ExtractFilePath(Application->ExeName) +"repTSBSoft_"+DatesTimes+".xlsx";
  Variant app, books, book, sheet, Rang, vCell;
  app = CreateOleObject("Excel.Application");
  books = app.OlePropertyGet("Workbooks");
  books.OleFunction("Open", WideString(fTPL));
  book = books.OlePropertyGet("item",1);
  sheet = book.OlePropertyGet("WorkSheets",1);
 
  vCell=sheet.OlePropertyGet("Cells").OlePropertyGet("Item",1,1);
  vCell.OlePropertySet("Value",WideString("Отчет по "+DBGrid2->Hint));
 
  const int bounds[4] = {0, DataModule1->ADOQuery2->RecordCount, 0, DataModule1->ADOQuery2->FieldCount};
  Variant vData = VarArrayCreate(bounds, 3, varVariant);
 
  DataModule1->ADOQuery2->First();
 
  for(int row = 0; row < DataModule1->ADOQuery2->RecordCount; ++row)
   {
     for(int column = 0; column < DataModule1->ADOQuery2->FieldCount; ++column)
        vData.PutElement(DataModule1->ADOQuery2->Fields->Fields[column]->AsVariant, row, column);
     DataModule1->ADOQuery2->Next();
   }
 
  Rang = sheet.OlePropertyGet("Range",sheet.OlePropertyGet("Cells",4,1),
         sheet.OlePropertyGet("Cells", DataModule1->ADOQuery2->RecordCount + 3, DataModule1->ADOQuery2->FieldCount));
 
  Rang.OlePropertySet("Value",vData);
  app.OlePropertySet("DisplayAlerts",false);
  app.OlePropertySet("Visible",true);
0
cpp_developer
Эксперт
20123 / 5690 / 1417
Регистрация: 09.04.2010
Сообщений: 22,546
Блог
23.08.2022, 16:59
Ответы с готовыми решениями:

Добавить в начало каждой строки файла ее порядковый номер
Описать процедуру AddLineNumbers(S, N, K, L), добавляющую в начало каждой строки существующего текстового файла с именем S ее порядковый...

Перевести в C++ и вначале каждой строки добавить порядковый номер
Var f,g:text; s:string; Begin Assign(f,'in.txt');Reset(f); Assign(g,'out.txt');Rewrite(g); While not Eof(f) do ...

Как добавить чекбокс в первый столбец CListCtrl?
Сабж. Сделал CListCtrl в виде Report view, как в первый столбец чекбокс добавить?

8
Модератор
 Аватар для D1973
9908 / 6445 / 2455
Регистрация: 21.01.2014
Сообщений: 27,354
Записей в блоге: 3
23.08.2022, 17:50
У Вас же формируется вариантный массив из запроса и сразу вставляется на лист Excel. Вот и увеличьте размерность массива по столбцам на 1 и добавляйте первым столбцом свой порядковый номер.
0
0 / 0 / 0
Регистрация: 08.12.2017
Сообщений: 206
24.08.2022, 08:14  [ТС]
да, я понимаю что массив. Не понимаю куда и как это сделать.
Можно примером помочь)
0
631 / 526 / 104
Регистрация: 05.08.2022
Сообщений: 2,810
24.08.2022, 11:19
Лучший ответ Сообщение было отмечено SAnatoliy как решение

Решение

Если я все правильно понимаю, то:

const int bounds[4] = {0, DataModule1->ADOQuery2->RecordCount, 0, DataModule1->ADOQuery2->FieldCount + 1};
Variant vData = VarArrayCreate(bounds, 3, varVariant);

....

for(int row = 0; row < DataModule1->ADOQuery2->RecordCount; ++row)
{
vData.PutElement(row+1, row, 0);
for(int column = 0; column < DataModule1->ADOQuery2->FieldCount; ++column)
vData.PutElement(DataModule1->ADOQuery2->Fields->Fields[column]->AsVariant, row, column + 1);
DataModule1->ADOQuery2->Next();
}

Добавлено через 1 час 6 минут
Модератор,
В моём сообщении жирным были подсвечены изменённые места кода, и это ВАЖНО!

Теперь же специально сделанная мною подсветка изменённых мест кода пропала. Я потратил время на расстановку разметки, т.к. это поможет пользователю понять суть.
Но вы её убрали.
Зачем??

Не исправляйте это сообщение.
1
0 / 0 / 0
Регистрация: 08.12.2017
Сообщений: 206
28.01.2025, 08:31  [ТС]
Уважаемые гуру подскажите.
Изменил код для создания первого столбца с порядковым номером строки. Но стал обрезаться последний столбец с данными.

В DBGrid отображаются полностью данные по запросу, а в экселе без последнего столбца. Как выгружатьвсе что есть в DBGrid?
0
631 / 526 / 104
Регистрация: 05.08.2022
Сообщений: 2,810
28.01.2025, 09:02
SAnatoliy, ошибка в 17-й строке.
Хм, вероятно это мем другого форума.
0
0 / 0 / 0
Регистрация: 08.12.2017
Сообщений: 206
28.01.2025, 14:33  [ТС]
не совсем понял про 17 строку, где там ошибка?

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

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
        String str_zapros;
 
        if(rep_filter.IsEmpty()) { str_zapros = rep_tabl; }
        else { str_zapros = rep_tabl+" "+rep_filter; }
        if(!zapros.IsEmpty()) { str_zapros = zapros; }
        else {
            DataModule1->ADOQuery->Close();
            DataModule1->ADOQuery->SQL->Text = str_zapros;
            DataModule1->ADOQuery->Open();
        }
 
String DatesTimes = Now().FormatString("DDMMYYYYhhmmss");
 
  if(!FileExists(rep_file)) { ShowMessage("ОЙ! <" +rep_file+ "> file not found."); return; }
 
  String fTPL = ExtractFilePath(Application->ExeName) + rep_file;
  String fXLS = ExtractFilePath(Application->ExeName) + "\\report\\rep_"+DatesTimes+".xlsx";
 
  Variant app, books, book, sheet, Rang, vCell;
  app = CreateOleObject("Excel.Application");
  books = app.OlePropertyGet("Workbooks");
  books.OleFunction("Open", WideString(fTPL));
  book = books.OlePropertyGet("item",1);
  sheet = book.OlePropertyGet("WorkSheets",1);
 
  vCell=sheet.OlePropertyGet("Cells").OlePropertyGet("Item",1,5);
  vCell.OlePropertySet("Value",WideString(name_rep));
 
  const int bounds[4] = {0, DataModule1->ADOQuery->RecordCount, 0, DataModule1->ADOQuery->FieldCount+1 };
  Variant vData = VarArrayCreate(bounds, 3, varVariant);
 
  DataModule1->ADOQuery->First();
 
  for(int row = 0; row < DataModule1->ADOQuery->RecordCount; ++row)
   {
     vData.PutElement(row+1, row, 0);
     for(int column = 0; column < DataModule1->ADOQuery->FieldCount; ++column)
        vData.PutElement(DataModule1->ADOQuery->Fields->Fields[column]->AsVariant, row, column+1);
        DataModule1->ADOQuery->Next();
   }
  Rang = sheet.OlePropertyGet("Range",sheet.OlePropertyGet("Cells",4,1),
         sheet.OlePropertyGet("Cells", DataModule1->ADOQuery->RecordCount + 3, DataModule1->ADOQuery->FieldCount));
 
    Rang.OlePropertySet("Value",vData);
    app.OlePropertySet("DisplayAlerts",false);
    app.OlePropertySet("Visible",true);
0
631 / 526 / 104
Регистрация: 05.08.2022
Сообщений: 2,810
28.01.2025, 14:53
Лучший ответ Сообщение было отмечено SAnatoliy как решение

Решение

Цитата Сообщение от SAnatoliy Посмотреть сообщение
Rang = sheet.OlePropertyGet("Range",sheet.OlePr opertyGet("Cells",4,1),
sheet.OlePropertyGet("Cells", DataModule1->ADOQuery->RecordCount + 3, DataModule1->ADOQuery->FieldCount));
Строка 41, 42
Смущает что последний параметр всего лишь DataModule1->ADOQuery->FieldCount
Может +1 надо?
1
0 / 0 / 0
Регистрация: 08.12.2017
Сообщений: 206
28.01.2025, 15:54  [ТС]
Огромное благодарю.

Поправил на
C++
1
DataModule1->ADOQuery->FieldCount + 1
Все столбцы отображаются.
0
Надоела реклама? Зарегистрируйтесь и она исчезнет полностью.
raxper
Эксперт
30234 / 6612 / 1498
Регистрация: 28.12.2010
Сообщений: 21,154
Блог
28.01.2025, 15:54
Помогаю со студенческими работами здесь

Как добавить контрол в первый столбец ListView?
Мне нужно добавить контрол в первый столбец ListView как мне бы это сделать? &lt;StackPanel x:Name=&quot;WorkWithUserStackPanel&quot;...

Как узнать порядковый номер строки Interbase
Есть таблица без уникальных чисел,содежащая в себе 2 столбца,один стринг другой интегер, который имеет значение только 1 или все 0, мне...

Как получить символ из строки зная его порядковый номер?
AnsiString chr = &quot;ÉÖÓÊÅÍÃØÙÇÕÚÔÛÂÀÏÐÎËÄÆÝß×ÑÌÈÒÜÁÞ.,7418529630 &quot;; // 012 AnsiString m = chr.&quot;символ_номер&quot;(2); ...

Вывести на экран первый отрицательный элемент и его порядковый номер
Для массивов А (N). Вывести на экран первый отрицательный элемент и его порядковый номер, пологая, что в массиве есть хотя бы один...

Найти в массиве первый максимальный элемент и его порядковый номер
Дан массив целых чисел. Найти в массиве первый максимальный элемент и его порядковый номер. Прога не работает , не понимаю что не так ...


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

Или воспользуйтесь поиском по форуму:
9
Ответ Создать тему
Новые блоги и статьи
Советы по крайней бережливости. Внимание, это ОЧЕНЬ длинный пост.
Programma_Boinc 28.12.2025
Советы по крайней бережливости. Внимание, это ОЧЕНЬ длинный пост. Налог на собак: https:/ / **********/ gallery/ V06K53e Финансовый отчет в Excel: https:/ / **********/ gallery/ bKBkQFf Пост отсюда. . .
Кто-нибудь знает, где можно бесплатно получить настольный компьютер или ноутбук? США.
Programma_Boinc 26.12.2025
Нашел на реддите интересную статью под названием Anyone know where to get a free Desktop or Laptop? Ниже её машинный перевод. После долгих разбирательств я наконец-то вернула себе. . .
Thinkpad X220 Tablet — это лучший бюджетный ноутбук для учёбы, точка.
Programma_Boinc 23.12.2025
Рецензия / Мнение/ Перевод Нашел на реддите интересную статью под названием The Thinkpad X220 Tablet is the best budget school laptop period . Ниже её машинный перевод. Thinkpad X220 Tablet —. . .
PhpStorm 2025.3: WSL Terminal всегда стартует в ~
and_y87 14.12.2025
PhpStorm 2025. 3: WSL Terminal всегда стартует в ~ (home), игнорируя директорию проекта Симптом: После обновления до PhpStorm 2025. 3 встроенный терминал WSL открывается в домашней директории. . .
Как объединить две одинаковые БД Access с разными данными
VikBal 11.12.2025
Помогите пожалуйста !! Как объединить 2 одинаковые БД Access с разными данными.
Новый ноутбук
volvo 07.12.2025
Всем привет. По скидке в "черную пятницу" взял себе новый ноутбук Lenovo ThinkBook 16 G7 на Амазоне: Ryzen 5 7533HS 64 Gb DDR5 1Tb NVMe 16" Full HD Display Win11 Pro
Музыка, написанная Искусственным Интеллектом
volvo 04.12.2025
Всем привет. Некоторое время назад меня заинтересовало, что уже умеет ИИ в плане написания музыки для песен, и, собственно, исполнения этих самых песен. Стихов у нас много, уже вышли 4 книги, еще 3. . .
От async/await к виртуальным потокам в Python
IndentationError 23.11.2025
Армин Ронахер поставил под сомнение async/ await. Создатель Flask заявляет: цветные функции - провал, виртуальные потоки - решение. Не threading-динозавры, а новое поколение лёгких потоков. Откат?. . .
Поиск "дружественных имён" СОМ портов
Argus19 22.11.2025
Поиск "дружественных имён" СОМ портов На странице: https:/ / norseev. ru/ 2018/ 01/ 04/ comportlist_windows/ нашёл схожую тему. Там приведён код на С++, который показывает только имена СОМ портов, типа,. . .
Сколько Государство потратило денег на меня, обеспечивая инсулином.
Programma_Boinc 20.11.2025
Сколько Государство потратило денег на меня, обеспечивая инсулином. Вот решила сделать интересный приблизительный подсчет, сколько государство потратило на меня денег на покупку инсулинов. . . .
КиберФорум - форум программистов, компьютерный форум, программирование
Powered by vBulletin
Copyright ©2000 - 2025, CyberForum.ru