Il faut du temps pour écrire une grande quantité de données dans un fichier xlsx avec Pythond, j'ai donc essayé d'utiliser la bibliothèque C ++. Il est utile pour exporter une grande quantité de données csv ou tsv vers xlsx sans utiliser Excel. J'ai oublié de comparer les vitesses, mais en raison de la différence de nébulosité, C ++ a pu exporter à grande vitesse. Je vais les comparer bientôt.
Dans le cas du fichier xlsx, il prend en charge jusqu'à 1 048 576 lignes et 16 384 colonnes.
libxlsxwriter
Une simple bibliothèque d'exportation xlsx pour C. Il est publié dans le Github Repository.
Une multitude d'exemples sont inclus.
Il peut être utilisé sans installation. Dans ce cas, il est nécessaire de spécifier le chemin.
$ git clone https://github.com/jmcnamara/libxlsxwriter.git
$ cd libxlsxwriter
$ make
$ sudo make install
L'entrée standard délimitée par des tabulations est sortie au format xlsx dans le fichier spécifié par l'argument, avec des tabulations comme délimiteurs de colonne de cellule.
tsv2xlsx.cpp
#include <fstream>
#include <iostream>
#include <string>
#include <vector>
#include <boost/algorithm/string.hpp>
#include "xlsxwriter.h"
int main(int argc, char **argv) {
//Vérification des arguments
if (argc < 2){
std::cerr << "Usage: " << argv[0] << " output_filename.xlsx" << std::endl;
}
//Créer des classeurs et des feuilles de calcul Excel
lxw_workbook *workbook = workbook_new(argv[argc-1]); // argv[argc-1]Est le nom du fichier
lxw_worksheet *worksheet = workbook_add_worksheet(workbook, NULL);
std::vector<std::string> v_string;
int row = 0;
char input_text[51200]; //Tampon d'entrée standard(Il peut être préférable de recevoir une entrée standard avec un type de chaîne)
while (std::cin.getline(input_text, sizeof(input_text))){
row++;
//Ne dépassez pas le nombre maximum de lignes.
if(row == 1000000){
break;
}
//Si l'entrée est vide, n'écrivez pas.
if(!input_text[0]){
continue;
}
//Séparez l'entrée avec des onglets.
boost::split(v_string, input_text, boost::is_any_of("\t"));
//1 sortie ligne
for (int col = 0; col < v_string.size(); col++){
worksheet_write_string(worksheet, row, col, v_string[col].c_str(), NULL);
}
}
workbook_close(workbook);
return 0;
}
% g++ tsv2xlsx.cpp -o tsv2xlsx -lxlsxwriter
% cat test.tsv | ./tsv2xlsx test.xlsx
Recommended Posts