Аватар для SkYMaaN
25 / 19 / 9
Регистрация: 05.04.2019
Сообщений: 338

LibXl - игнорируется часть листа в таблице

11.12.2020, 20:08. Показов 2423. Ответов 24
Метки нет (Все метки)

Студворк — интернет-сервис помощи студентам
Суть функции в чтении ячеек листа excel и помещении в JSON. Но определённые ячейки таблицы просто игнорируются, хотя цикл проходит по ним.
Microsoft Visual Studio 2019
Библиотека Excel: https://www.libxl.com/home.html
Библиотека JSON: https://github.com/nlohmann/json
Функция чтения листа:

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
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
93
94
95
96
97
98
99
100
101
102
103
104
105
106
107
108
109
110
111
112
113
114
115
116
117
118
119
120
121
122
123
124
125
126
127
128
129
130
131
132
133
134
135
136
137
138
139
140
141
142
143
144
145
146
147
148
149
150
151
152
153
154
155
156
157
158
159
160
161
162
163
164
165
166
167
168
169
170
171
172
173
174
Book* book = xlCreateBook();
    if (book->load(path))
    {
        Sheet* sheet = book->getSheet(1);
        if (sheet)
        {
            json tmp =
            {
                {u8"Область", ""}, //0
                {u8"Обстежена_площа", ""}, //1
                {u8"Дуже_низький", ""}, //2
                {u8"Дуже_низький_%", ""}, //3
                {u8"Низький", ""}, //4
                {u8"Низький_%", ""}, //5
                {u8"Середній", ""}, //6
                {u8"Середній_%", ""}, //7
                {u8"Підвищений", ""}, //8
                {u8"Підвищений_%", ""}, //9
                {u8"Високий", ""}, //10
                {u8"Високий_%", ""}, //11
                {u8"Дуже_високий", ""}, //12
                {u8"Дуже_високий_%", ""}, //13
                {u8"Середньо_зважений_показник", ""}, //14
            };
            for (size_t row = sheet->firstRow(); row < sheet->lastFilledRow(); row++)
            {
                for (size_t col = sheet->firstCol(); col < sheet->lastCol(); col++)
                {
                    CellType cellType = sheet->cellType(row, col);
                    switch (cellType)
                    {
                        case CELLTYPE_STRING:
                        {
                            if (col == 0)
                            {
                                const wchar_t* s = sheet->readStr(row, col);
 
                                const auto key = tools::utf8::convert(L"Область");
                                const auto val = tools::utf8::convert(s);
                                tmp[key] = val;
                            }
                            if (col == 1) //Обстежена_площа
                            {
                                const wchar_t* s = sheet->readStr(row, col);
 
                                const auto key = tools::utf8::convert(L"Обстежена_площа");
                                const auto val = tools::utf8::convert(s);
                                tmp[key] = val;
                            }
                            if (col == 2) //Дуже_низький
                            {
                                const wchar_t* s = sheet->readStr(row, col);
 
                                const auto key = tools::utf8::convert(L"Дуже_низький");
                                const auto val = tools::utf8::convert(s);
                                tmp[key] = val;
                            }
                            if (col == 3) //Дуже_низький_%
                            {
                                const wchar_t* s = sheet->readStr(row, col);
 
                                const auto key = tools::utf8::convert(L"Дуже_низький_%");
                                const auto val = tools::utf8::convert(s);
                                tmp[key] = val;
                            }
                            if (col == 4) //Низький
                            {
                                const wchar_t* s = sheet->readStr(row, col);
 
                                const auto key = tools::utf8::convert(L"Низький");
                                const auto val = tools::utf8::convert(s);
                                tmp[key] = val;
                            }
                            if (col == 5) //Низький_%
                            {
                                const wchar_t* s = sheet->readStr(row, col);
 
                                const auto key = tools::utf8::convert(L"Низький_%");
                                const auto val = tools::utf8::convert(s);
                                tmp[key] = val;
                            }
                            if (col == 6) //Середній
                            {
                                const wchar_t* s = sheet->readStr(row, col);
 
                                const auto key = tools::utf8::convert(L"Середній");
                                const auto val = tools::utf8::convert(s);
                                tmp[key] = val;
                            }
                            if (col == 7) //Середній_%
                            {
                                const wchar_t* s = sheet->readStr(row, col);
 
                                const auto key = tools::utf8::convert(L"Середній_%");
                                const auto val = tools::utf8::convert(s);
                                tmp[key] = val;
                            }
                            if (col == 8) //Підвищений
                            {
                                const wchar_t* s = sheet->readStr(row, col);
 
                                const auto key = tools::utf8::convert(L"Підвищений");
                                const auto val = tools::utf8::convert(s);
                                tmp[key] = val;
                            }
                            if (col == 9) //Підвищений_%
                            {
                                const wchar_t* s = sheet->readStr(row, col);
 
                                const auto key = tools::utf8::convert(L"Підвищений_%");
                                const auto val = tools::utf8::convert(s);
                                tmp[key] = val;
                            }
                            if (col == 10) //Високий
                            {
                                const wchar_t* s = sheet->readStr(row, col);
 
                                const auto key = tools::utf8::convert(L"Високий");
                                const auto val = tools::utf8::convert(s);
                                tmp[key] = val;
                            }
                            if (col == 11) //Високий_%
                            {
                                const wchar_t* s = sheet->readStr(row, col);
 
                                const auto key = tools::utf8::convert(L"Високий_%");
                                const auto val = tools::utf8::convert(s);
                                tmp[key] = val;
                            }
                            if (col == 12) //Дуже_високий
                            {
                                const wchar_t* s = sheet->readStr(row, col);
                                const auto key = tools::utf8::convert(L"Дуже_високий");
                                const auto val = tools::utf8::convert(s);
                                tmp[key] = val;
                            }
                            if (col == 13) //Дуже_високий
                            {
                                const wchar_t* s = sheet->readStr(row, col);
                                const auto key = tools::utf8::convert(L"Дуже_високий_%");
                                const auto val = tools::utf8::convert(s);
                                tmp[key] = val;
                            }
                            if (col == 14) //Середньо_зважений_показник
                            {
                                const wchar_t* s = sheet->readStr(row, col);
                                const auto key = tools::utf8::convert(L"Середньо_зважений_показник");
                                const auto val = tools::utf8::convert(s);
                                tmp[key] = val;
                            }
                            break;
                        }
                        case CELLTYPE_NUMBER:
                        {
                            //like string
                        }
                        case CELLTYPE_BLANK:
                        {
                            
                           //null
                        }
                    }
                }     //for (size_t col = sheet->firstCol(); col < sheet->lastCol(); col++)
                 const auto key = tools::utf8::convert(L"elements");
                const auto key1 = tools::utf8::convert(L"element");
                const auto key2 = tools::utf8::convert(L"date");
                jarr[key][key1].push_back(tmp);
                tmp.clear();
            }     //for (size_t row = 3; row < sheet->lastRow(); row++) 
           
        }
        
    }
    book->release();
В чём ошибка?
Вложения
Тип файла: xls tabl-10-tur-makroel.xls (128.0 Кб, 6 просмотров)
0
Лучшие ответы (1)
Programming
Эксперт
39485 / 9562 / 3019
Регистрация: 12.04.2006
Сообщений: 41,671
Блог
11.12.2020, 20:08
Ответы с готовыми решениями:

Игнорируется цикл for || LibXL
Есть код реализующий сохранение данных в табличном формате. Но почему-то игнорируется цикл for. Я поставил breakpoint внутри цикла и он...

Игнорируется часть запроса
Народ. В БД имеется такой код: Private Sub ViborZA_AfterUpdate() Me.Requery Set RSTgorg = CurrentDb.OpenRecordset(&quot;SELECT...

Игнорируется часть кода
Здравствуйте, при выполнении программы игнорируется часть кода(выделил красным цветом), а переходит сразу к следующему(выдели синим цветом)...

24
863 / 513 / 215
Регистрация: 19.01.2019
Сообщений: 1,216
14.12.2020, 00:10
Студворк — интернет-сервис помощи студентам
Александр, так проматайте в дебагере до этой строки и посмотрите, что там происходит. Это самый верный способ разобраться.
0
 Аватар для SkYMaaN
25 / 19 / 9
Регистрация: 05.04.2019
Сообщений: 338
14.12.2020, 09:51  [ТС]
Цитата Сообщение от nalbe666 Посмотреть сообщение
проматайте
Есть. Начинает читать всё NULL
Миниатюры
LibXl - игнорируется часть листа в таблице   LibXl - игнорируется часть листа в таблице  
0
 Аватар для SkYMaaN
25 / 19 / 9
Регистрация: 05.04.2019
Сообщений: 338
14.12.2020, 10:19  [ТС]
Будто работает только определённое кол-во итераций цикла
0
863 / 513 / 215
Регистрация: 19.01.2019
Сообщений: 1,216
14.12.2020, 12:14
Лучший ответ Сообщение было отмечено SkYMaaN как решение

Решение

Библиотека-то LibXL платная. Лимит в 300 ячеек. Не в этом ли проблема?
It will write a banner in the first row of each spreadsheet and it will be able to read only 300 cells (first row is unavailable). Buy a license key to remove banner and reading restriction.
1
 Аватар для SkYMaaN
25 / 19 / 9
Регистрация: 05.04.2019
Сообщений: 338
14.12.2020, 19:11  [ТС]
Цитата Сообщение от nalbe666 Посмотреть сообщение
Не в этом ли проблема
Действительно в этом, спасибо
0
Надоела реклама? Зарегистрируйтесь и она исчезнет полностью.
inter-admin
Эксперт
29715 / 6470 / 2152
Регистрация: 06.03.2009
Сообщений: 28,500
Блог
14.12.2020, 19:11

Часть входного выражения игнорируется!
Что значит &quot;Часть входного выражения игнорируется&quot;? Код отсюда http://cybern.ru/lisp-cycles.html(setq sum 0);0 (do ( ( i 1 (+ i 1))) ...

Игнорируется часть регулярного выражения
Всех приветствую. Возможно эта проблема характерна только для lualatex, но, как я понимаю, в обычном lua тоже есть проблемы с регулярными...

Из листа клетчатой бумаги N*N вырезали М клеток, на сколько кусков распадается оставшаяся часть листа?
условие:из листа клетчатой бумаги N*N клеток вырезали М клеток . на сколько кусков распадается оставшаяся часть листа? Первая строка...

Из листа клетчатой бумаги размером М*Н клеток удалили некоторые клетки. На сколько кусков распадется оставшаяся часть листа?
Срочно нужна помощь в выполнении данной задачи, т.к. в Паскале я полный 0. кому не сложно и есть время - выручите. Буду очень признателен

Из листа клетчатой бумаги размером MXN клеток удалили некоторые клетки. На какое количество кусков распадется оставшаяся часть листа
Помогите, пожалуйстанайти ошибку в задаче: Из листа клетчатой бумаги размером MXN клеток удалили некоторые клетки. На какое количество...


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

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

Новые блоги и статьи
Нейтральные знания ..., ... чистая наука. Пока что-то проходит модерацию на Хабре, стоит развить мысль ...
Hrethgir 20.07.2026
К таким радикальным взглядам я конечно в той публикации не приходил, но чтобы скоротать вечер, решил углубиться немного. 1. Почему показания термометра заряжены целью? Цель заложена в самом. . .
Установка нескольких штампов электронной подписи в строго определенных местах файла docx
ВладимирСамохин 19.07.2026
(В!) Работа с Электронной подписью - это неотъемлемая часть современного документооборота. Но что делать, если нужно поставить несколько штампов электронной подписи в строго определенных местах. . .
сукцессия 35. Научная статья о проделанной работе
anaschu 19.07.2026
Написал в формате латекс и пдф
Вангую, что это не пройдёт модерацию, и на неделе я запущу свой сервер.
Hrethgir 19.07.2026
Эта публикация сейчас в песочнице и ждёт приглашения. https:/ / habr. com/ ru/ sandbox/ 295048/ По ссылке 403. Не очень информативно такую ссылку постить. Запись от Usaga размещена Сегодня в 06:46 . . .
сукцессия 33. открытые вопросы от клауде
anaschu 19.07.2026
"Что накопилось за эту часть А — тринадцать правок, из которых шесть пришли из ваших вопросов и каждая оказалась реальной ошибкой, а не калибровкой: односторонний симбиоз, отсутствующий листопад,. . .
32 сукцессия
anaschu 19.07.2026
сукцессия 28‑мерное ядро стабилизировано Коллеги, фиксирую разбор инженерных правок и их изоморфную проекцию на экономику, меметику и половой отбор. Модель теперь не «подкручивает» сходимость —. . .
сукцессия 31: модель микоризы - это модель ещё нескольких явлений, социальных и экономических
anaschu 18.07.2026
Теория «Всего»: апдейт v1. 1. 2 — 28‑мерное ядро стабилизировано Коллеги, фиксирую разбор инженерных правок и их изоморфную проекцию на экономику, меметику и половой отбор. Модель теперь не. . .
сукцессия 30. Массив проверяющих друг друга моделей
anaschu 18.07.2026
Архитектура сети взаимопроверяющих моделей микоризной сукцессии (v2. 0) Развитие тензорного ОДУ-ядра и создание кросс-платформенного калибровочного полигона Уважаемые коллеги! В продолжение. . .
КиберФорум - форум программистов, компьютерный форум, программирование
Powered by vBulletin
Copyright ©2000 - 2026, CyberForum.ru