Реализовать класс XlsxTemplate выполняющий экспорт в Excel
Цена договорная
•
электронные деньги
Необходимо реализовать класс XlsxTemplate выполняющий экспорт в Excel.
Основными требованиями являются библиотека Qt и реализация класса без использования OLE.
Например с использованием следующей библиотеки:
https://github.com/dbzhang800/QtXlsxWriter
class XlsxTemplate
{
public:
XlsxTemplate();
~XlsxTemplate();
/*Задаёт путь к шаблону*/
SetTemplate(QString sFilename);
/*Карта с параметрами*/
SetParams(QMap<QString,QVariant> mapParams);
/*Карта с таблицми*/
SetTables(QMap<QString,QAbstractTableModel*> mapTables);
bool Run(QString sNewFilename);
QString GetLastError();
};
Алгоритм работы следующий:
Сначала передаются карты параметров и таблиц.
Затем задаётся файл шаблона.
Потом вызывается функция Run, файл шаблона копируется по пути sNewFilename и далее начинается перебор ячеек с данными.
При нахождении конструкции "<@"<данные в формате csv>"@>" необходимо обработать её в соответствии с описанием ниже.
Разделяются 2 основных типа:
Параметр:
<@param="param1"@>
param="<название параметра>"
Замена всего <@...@> значением из карты QMap<QString,QVariant> mapParams.
Таблица:
Таблица описывается набором параметров
<@type="begintable";table="name";replace=false@>
Если встречается параметр с типом begintable, значит с этой колонки начинается строка таблицы.
Параметр table задаёт название текущей таблицы с данными(ключ в карте QMap<QString,QAbstractTableModel*> mapTables).
<@type="value";column="name"@>
Параметр с типом value, работает аналогично <@param="param1"@>, только берёт данные из текущей строки таблицы.
Параметр column может быть как названием колонки так и номером.
<@type="endtable"@>
Параметр с типом endtable, означает что в этом месте заканчивается строка.
После того как найдено начало и конец строки, необходимо проверить количество строк в таблице. Если строка одна то необходимо просто заменить параметры в строке.
Если строк больше, то нужно скопировать диапазон от начала до конца строки(т.е. если строка таблицы состоит из нескольких excel строк, то необходимо скопировать их начиная не с первой колонки, а с колонки в которой расположено начало строки и до колонки в которой строка заканчивается.)
Затем заменить все параметры в строке и перейти к следующей.
replace=<true или false>
Если replace=true то программа вместо копирования строки, запоминает положение параметров в строке, и просто заполняет уже готовые строки ниже.
Это необходимо в случае наличия фиксированного количества строк таблицы в шаблоне.
Основными требованиями являются библиотека Qt и реализация класса без использования OLE.
Например с использованием следующей библиотеки:
https://github.com/dbzhang800/QtXlsxWriter
class XlsxTemplate
{
public:
XlsxTemplate();
~XlsxTemplate();
/*Задаёт путь к шаблону*/
SetTemplate(QString sFilename);
/*Карта с параметрами*/
SetParams(QMap<QString,QVariant> mapParams);
/*Карта с таблицми*/
SetTables(QMap<QString,QAbstractTableModel*> mapTables);
bool Run(QString sNewFilename);
QString GetLastError();
};
Алгоритм работы следующий:
Сначала передаются карты параметров и таблиц.
Затем задаётся файл шаблона.
Потом вызывается функция Run, файл шаблона копируется по пути sNewFilename и далее начинается перебор ячеек с данными.
При нахождении конструкции "<@"<данные в формате csv>"@>" необходимо обработать её в соответствии с описанием ниже.
Разделяются 2 основных типа:
Параметр:
<@param="param1"@>
param="<название параметра>"
Замена всего <@...@> значением из карты QMap<QString,QVariant> mapParams.
Таблица:
Таблица описывается набором параметров
<@type="begintable";table="name";replace=false@>
Если встречается параметр с типом begintable, значит с этой колонки начинается строка таблицы.
Параметр table задаёт название текущей таблицы с данными(ключ в карте QMap<QString,QAbstractTableModel*> mapTables).
<@type="value";column="name"@>
Параметр с типом value, работает аналогично <@param="param1"@>, только берёт данные из текущей строки таблицы.
Параметр column может быть как названием колонки так и номером.
<@type="endtable"@>
Параметр с типом endtable, означает что в этом месте заканчивается строка.
После того как найдено начало и конец строки, необходимо проверить количество строк в таблице. Если строка одна то необходимо просто заменить параметры в строке.
Если строк больше, то нужно скопировать диапазон от начала до конца строки(т.е. если строка таблицы состоит из нескольких excel строк, то необходимо скопировать их начиная не с первой колонки, а с колонки в которой расположено начало строки и до колонки в которой строка заканчивается.)
Затем заменить все параметры в строке и перейти к следующей.
replace=<true или false>
Если replace=true то программа вместо копирования строки, запоминает положение параметров в строке, и просто заполняет уже готовые строки ниже.
Это необходимо в случае наличия фиксированного количества строк таблицы в шаблоне.
- Файлы
В заказе есть исполнитель
При переводе заказа из архивного в актуальный, текущий исполнитель будет снят с задачи.
Выберите тип сделки
С безопасной сделкой вы всегда сможете вернуть средства, если что-то пойдет не так. С простой сделкой вы самостоятельно договариваетесь с исполнителем об оплате и берете на себя решение конфликтов.