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

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

12.02.2023, 23:01. Показов 2300. Ответов 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 / 136
Регистрация: 02.10.2008
Сообщений: 1,796
Записей в блоге: 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 / 136
Регистрация: 02.10.2008
Сообщений: 1,796
Записей в блоге: 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
Ответ Создать тему
Новые блоги и статьи
Советы по крайней бережливости. Внимание, это ОЧЕНЬ длинный пост.
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 - 2026, CyberForum.ru