Форум программистов, компьютерный форум, киберфорум
C++
Войти
Регистрация
Восстановить пароль
Блоги Сообщество Поиск  
 
 
Рейтинг 5.00/11: Рейтинг темы: голосов - 11, средняя оценка - 5.00
 Аватар для SkYMaaN
25 / 19 / 9
Регистрация: 05.04.2019
Сообщений: 338

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

11.12.2020, 20:08. Показов 2410. Ответов 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
Ответ Создать тему
Новые блоги и статьи
23. что сделано за последнее время.
anaschu 17.06.2026
• Эталон: Клиника НИИ питания РАМН, Москва — централизованный пищеблок, 225 коек, 180 пациентов • Git: репозиторий med2, ветка абсентеизм. Рабочий файл: СРесурсами1_v4. alp • Смежный проект:. . .
22. Подключение слоя системной динамики (потоковые диффуры): экономические метрики модели
anaschu 17.06.2026
Апдейт модели: финансовый контур, разделение затрат Продолжаю развивать модель рабочего коллектива на AnyLogic. В этот раз работа шла над агентом Экономика — финансовым SD-слоем модели. Задача:. . .
[golang] Insert Delete GetRandom O(1) (Leetcode: 380)
alhaos 16.06.2026
Insert Delete GetRandom O(1) Сложность: Medium Источник: LeetCode 380 Задача Реализовать структуру данных RandomizedSet, которая поддерживает следующие операции за O(1) в среднем:
Свет в конце тоннеля
kumehtar 16.06.2026
Поймал себя на одной мысли. Раньше мне всегда казалось неправильным жить без чёткого понимания, куда всё идёт. Будто я иду по дороге судьбы, но не знаю, куда она ведёт. А раз не знаю — значит,. . .
[golang] Реализация стека с поддержкой получения минимального элемента за O(1)
alhaos 16.06.2026
Min Stack Сложность: Medium Источник: LeetCode 155 Задача: Реализовать стек который поддерживает push, pop, top и получение минимального элемента за O(1). Методы:
[golang] Конкурентный fetcher с ограничением максимального количества одновременных HTTP запросов.
alhaos 10.06.2026
Задача Реализовать конкурентный fetcher с ограничением максимального количества одновременных HTTP запросов. Сигнатура func Fetch(urls string, maxConcurrent int) Result Пример urls :=. . .
[golang] Состояние гонки (race condition)
alhaos 10.06.2026
Состояние гонки (race condition) Состояние гонки (Race Condition) — это ошибка, возникающая при одновременном доступе нескольких горутин к одним и тем же данным без должной синхронизации. При этом. . .
Взрослые отношения, и почему они не получаются
kumehtar 09.06.2026
Когда в детстве ребёнок не получает от родителей чего-то важного, он лишается не просто приятных переживаний, а основы для формирования определённых внутренних качеств и навыков. Если ребёнок не. . .
КиберФорум - форум программистов, компьютерный форум, программирование
Powered by vBulletin
Copyright ©2000 - 2026, CyberForum.ru