Питання виникло в зв'язку з виниклою необхідністю прочитати .xls файл в Linux'і. Я так думаю у більшості користувачів Linux, є якийсь небудь офісний пакет, такий як OpenOffice або LibreOffice або щось там ще, за допомогою якого можна легко конвертувати .xls в .сsv. А .сsv - це текст, який можна читати в будь-якій системі. Пропоную читати файл у QTableWidget. Зберемо простеньку програму. Файл file_csv.csv виглядає так:
На форму покладемо QTableWidget, QListWidget, QPushButton.
void MainWindow::readFile(){
QFile file("file_csv.csv"); //файл (треба буде зробити діалог)
QStringList listA; //лист в який запишемо данні
int row = 0; //кількість рядків у майбутній таблиці (ми ж не знаємо скільки їх там ;)
if (file.open(QIODevice::ReadOnly)){
while (!file.atEnd()){
QString line = file.readLine(); // читаємо по рядках, якщо читати до кінця результат буде некоректний, але буде :)
listA = line.split(","); //вказуємо роздільник
ui->listWidget->addItems(listA); //результат на QListWidget
ui->spinBox_col->setValue(listA.size()); //показуємо кол. колонок
ui->tableWidget->setColumnCount(listA.size()); // призначаємо таблиці кількість колонок
ui->tableWidget->insertRow(row); //з кожним новим рядком вставляємо і в таблицю рядок
for (int x = 0; x < listA.size(); x++){
QTableWidgetItem *test = new QTableWidgetItem(listA.at(x));
ui->tableWidget->setItem(row, x, test);
}
row++;
}
}
file.close();
}
Результат:
Звичайно в ідеалі треба було б зробити діалог вибору файлу і ... вибір роздільника і ... перший рядок загнати в шапку таблиці