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

Конвертирование XLSX в CSV

12.02.2023, 23:01. Показов 2361. Ответов 7
Метки c++, xlsx (Все метки)

Студворк — интернет-сервис помощи студентам
Здравствуйте.
Задача: На вход поступает файл .xlsx, нужно считать с него данные, преобразовать и вывести в файл .xlsx/.csv
Погуглив и почитав форум стало понятно, что адекватных открытых библиотек для считывания из файла .xlsx нет.
Подскажите пожалуйста, может есть какие-то адекватные конвертеры из .xlsx в например .csv?
0
IT_Exp
Эксперт
34794 / 4073 / 2104
Регистрация: 17.06.2006
Сообщений: 32,602
Блог
12.02.2023, 23:01
Ответы с готовыми решениями:

Работа с csv и xlsx c++
Всем здравствуйте. Имеется xlsx таблица с bin идентификатором карты, оператором платежа и банком(все в разных столбцах, все идет по...

Конвертировать из .xlsx в .csv
Здравствуйте! Возможно ли файл с расширением .xlsx преобразовать в файл с расширением .csv? В программе реализован модуль с обработкой...

Создание библиотеки , которая преобразует таблицы из xlsx в csv
По заданию , нужно распаковать данные таблиц в память , разобрать при помощи библиотеки TinyXML содержимое файлов таблиц и сохранить...

7
 Аватар для anapshy
531 / 272 / 220
Регистрация: 14.11.2016
Сообщений: 1,052
13.02.2023, 05:13
C++
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
#include <iostream>
#include <fstream>
#include <string>
 
int main() {
  std::string xlsx_filename = "input.xlsx";
  std::string csv_filename = "output.csv";
 
  std::string line;
  std::ifstream xlsx_file(xlsx_filename);
  std::ofstream csv_file(csv_filename);
  while (std::getline(xlsx_file, line)) {
    csv_file << line << '\n';
  }
 
  return 0;
}
0
0 / 0 / 0
Регистрация: 03.04.2022
Сообщений: 9
13.02.2023, 19:20  [ТС]
Ваш вариант не сработает. Так как xlsx - zip архив с набором xml файлов, например. Так просто не получится))
0
599 / 421 / 137
Регистрация: 02.10.2008
Сообщений: 1,798
Записей в блоге: 1
13.02.2023, 19:58
https://learn.microsoft.com/ru... .oleobject
1
631 / 526 / 104
Регистрация: 05.08.2022
Сообщений: 2,810
16.02.2023, 20:26
Если на машине с программой точно стоит Excel - то можно его дергать через COM, ссылка в посте выше. Но обязательно нужен установленный Excel.
Сторонних библиотек чтение excel нет.

Как вариант, если Excel файл простой - распаковать из него файлы, структура у вложенных xml-файлов у них достаточно простая (для простой таблицы), оттуда любым xml-парсером читать. Правда там не все в один файл сложено, но если структура таблицы Excel регулярная - то несложно.

Не по теме:

А вот интересно, есть же Open Office, он умеет читать excel-файлы. Т.е. в его коде есть в принципе читалка и даже писалка excel-файлов.

1
599 / 421 / 137
Регистрация: 02.10.2008
Сообщений: 1,798
Записей в блоге: 1
16.02.2023, 23:32
KSergey9, Вручную парсить xmls -это смерти подобно. Это "чудовище" только отчасти соответствует ODT.
Я уже пробовал разобраться с одной единственной ячейкой "вруную" - ну его нах...
0
12 / 10 / 2
Регистрация: 06.10.2013
Сообщений: 19
18.02.2023, 12:44
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
#include <iostream>
#include <string>
#include <vector>
#include <xlsxwriter.h>
#include <xlsxio_read.h>
 
using namespace std;
 
int main() {
    xlsxioreader xls_reader;
    xls_reader = xlsxioread_open("input.xlsx");
 
    if (!xls_reader) {
        cerr << "Error opening input file" << endl;
        return 1;
    }
 
    vector<vector<string>> data;
 
    const char* sheetname = NULL;
    xlsxioreadersheet sheet = NULL;
 
    while ((sheet = xlsxioread_sheet_next(xls_reader, sheetname)) != NULL) {
        const char* row_str = NULL;
        const char* cell_str = NULL;
        size_t row_size = 0;
        size_t cell_size = 0;
 
        while (xlsxioread_sheet_next_row(sheet)) {
            vector<string> row;
            while ((cell_str = xlsxioread_sheet_next_cell(sheet, &cell_size)) != NULL) {
                row.push_back(string(cell_str, cell_size));
            }
            data.push_back(row);
        }
        sheetname = xlsxioread_sheet_name(sheet);
    }
 
    xlsxioread_close(xls_reader);
 
    // Преобразование данных и запись в файл .csv
    FILE* fp = fopen("output.csv", "w");
 
    for (vector<string>& row : data) {
        for (int i = 0; i < row.size(); i++) {
            if (i != 0) {
                fprintf(fp, ",");
            }
            fprintf(fp, "%s", row[i].c_str());
        }
        fprintf(fp, "\n");
    }
 
    fclose(fp);
 
    return 0;
}
2
0 / 0 / 0
Регистрация: 03.04.2022
Сообщений: 9
21.02.2023, 18:01  [ТС]
Вообщем. Самое адекватное решение, которое я нашёл - LibXL. Библиотека конечно платная, но есть бесплатная версия в которой:
1) можно обрабатывать 300 ячеек за сеанс
2) В начале файла по умолчанию генерируется противная надпись с названием библиотеки, которую кроме как вручную никак не удалишь.
При этом, повозившись, можно найти ключи активации полной версии, в которой этих ограничений нет))
0
Надоела реклама? Зарегистрируйтесь и она исчезнет полностью.
BasicMan
Эксперт
29316 / 5623 / 2384
Регистрация: 17.02.2009
Сообщений: 30,364
Блог
21.02.2023, 18:01
Помогаю со студенческими работами здесь

Из xlsx в csv
В офисной программе Excel (или ее аналогах) всегда можно сохранить таблицу в формате csv. Представьте, что этот функционал сломался. ...

Xlsx/csv
подскажите максимально простую библиотеку для записи в xlsx/csv P.S. понимаю что csv можно и просто писать в текстовый файл,на крайняк...

Задача по xlsx csv
Ребята, здравствуйте, пытаюсь пройти бесплатный курс обучения. Но тут чем дальше в лес - тем непонятнее. У меня есть несколько задач, с...

Convert xlsx to csv
Доброго дня! Подскажите, как можно конвертировать все листы одной книги xlsx в один csv файл? Есть следующий код: Dim...

Беда с конвертом xlsx -> csv
Добрый день! Перелистал много тем, связанных с excel-csv, перепробовал множество решений - но так и не справился с задачей. Задача...


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

Или воспользуйтесь поиском по форуму:
8
Ответ Создать тему
Новые блоги и статьи
SDL3 для Web (WebAssembly): Реализация движения на Box2D v3 - трение и коллизии с повёрнутыми стенами
8Observer8 20.02.2026
Содержание блога Box2D позволяет легко создать главного героя, который не проходит сквозь стены и перемещается с заданным трением о препятствия, которые можно располагать под углом, как верхнее. . .
Конвертировать закладки radiotray-ng в m3u-плейлист
damix 19.02.2026
Это можно сделать скриптом для PowerShell. Использование . \СonvertRadiotrayToM3U. ps1 <path_to_bookmarks. json> Рядом с файлом bookmarks. json появится файл bookmarks. m3u с результатом. # Check if. . .
Семь CDC на одном интерфейсе: 5 U[S]ARTов, 1 CAN и 1 SSI
Eddy_Em 18.02.2026
Постепенно допиливаю свою "многоинтерфейсную плату". Выглядит вот так: https:/ / www. cyberforum. ru/ blog_attachment. php?attachmentid=11617&stc=1&d=1771445347 Основана на STM32F303RBT6. На борту пять. . .
Камера Toupcam IUA500KMA
Eddy_Em 12.02.2026
Т. к. у всяких "хикроботов" слишком уж мелкий пиксель, для подсмотра в ESPriF они вообще плохо годятся: уже 14 величину можно рассмотреть еле-еле лишь на экспозициях под 3 секунды (а то и больше),. . .
И ясному Солнцу
zbw 12.02.2026
И ясному Солнцу, и светлой Луне. В мире покоя нет и люди не могут жить в тишине. А жить им немного лет.
«Знание-Сила»
zbw 12.02.2026
«Знание-Сила» «Время-Деньги» «Деньги -Пуля»
SDL3 для Web (WebAssembly): Подключение Box2D v3, физика и отрисовка коллайдеров
8Observer8 12.02.2026
Содержание блога Box2D - это библиотека для 2D физики для анимаций и игр. С её помощью можно определять были ли коллизии между конкретными объектами и вызывать обработчики событий столкновения. . . .
SDL3 для Web (WebAssembly): Загрузка PNG с прозрачным фоном с помощью SDL_LoadPNG (без SDL3_image)
8Observer8 11.02.2026
Содержание блога Библиотека SDL3 содержит встроенные инструменты для базовой работы с изображениями - без использования библиотеки SDL3_image. Пошагово создадим проект для загрузки изображения. . .
КиберФорум - форум программистов, компьютерный форум, программирование
Powered by vBulletin
Copyright ©2000 - 2026, CyberForum.ru