XSLXWriter Вставить несколько изображений в центр ячейки в столбце
Я пытаюсь использовать libxlsxwriter для вставки изображений в столбец строка за строкой, но изображения выходят за пределы ячейки и накладываются друг на друга.
Редактировать:
Я обнаружил, что эта строка кода может вызывать некоторые проблемы
worksheet_set_default_row(worksheet,110,true);
и изменил свой код на следующий:
#include <QCoreApplication>
#include "QProcess"
#include "QThread"
#include "xlsxwriter.h"
#include <QtGui/QImage>
#include <QBuffer>
#include<QDebug>
int main(int argc, char *argv[])
{
QCoreApplication a(argc, argv);
QImage* img = new QImage("F:/Muaz/Programming/Visual C++/Qt/web_browser_open_close/Image0004.jpg");
int pixel_width = int(25 * 7 + 0.5) + 5;
int pixel_height = int(4.0 / 3.0 * 110);
QImage scaled_img =img->scaled(pixel_width,pixel_height,Qt::KeepAspectRatio);
int new_h = scaled_img.height();
int new_w = scaled_img.width();
QByteArray sbytes;
QBuffer buffer(&sbytes);
buffer.open(QIODevice::WriteOnly);
scaled_img.save(&buffer, "jpg");
buffer.close();
unsigned char* data =new unsigned char[sbytes.size()];
memcpy(data,sbytes.constData(),sbytes.size());
QImage* img1 = new QImage("F:/Muaz/Programming/Visual C++/Qt/web_browser_open_close/Image0003.jpg");
QImage scaled_img1 =img1->scaled(pixel_width,pixel_height,Qt::KeepAspectRatio);
qInfo() << "width: " << new_w << ", height: " << new_h;
qInfo() << "width: " << scaled_img1.width() << ", height: " << scaled_img1.height();
QByteArray sbytes1;
QBuffer buffer1(&sbytes1);
buffer1.open(QIODevice::WriteOnly);
scaled_img1.save(&buffer1, "jpg");
buffer1.close();
unsigned char* data1 =new unsigned char[sbytes1.size()];
memcpy(data1,sbytes1.constData(),sbytes1.size());
qInfo() << sbytes.size();
qInfo() << sbytes1.size();
lxw_workbook *workbook = workbook_new("F:/Muaz/Programming/Visual C++/Qt/web_browser_open_close/sample.xlsx");
lxw_worksheet *worksheet = workbook_add_worksheet(workbook, "Shop Items");
worksheet_set_row(worksheet,0,110,NULL);
worksheet_set_row(worksheet,1,110,NULL);
worksheet_set_row(worksheet,2,110,NULL);
worksheet_set_row(worksheet,3,110,NULL);
worksheet_set_column(worksheet,1,1,25,NULL);
lxw_image_options lio = {.x_offset = (pixel_width-new_w)/2, .y_offset = (pixel_height-new_h)/2};
worksheet_write_string(worksheet, 0, 0, "Ürün Adı", NULL);
worksheet_insert_image_buffer_opt(worksheet,0,1,data,sbytes.size(), &lio);
worksheet_write_string(worksheet, 1, 0, "Ürün Adı", NULL);
lio = {.x_offset = (pixel_width-scaled_img1.width())/2, .y_offset = (pixel_height-scaled_img1.height())/2};
worksheet_insert_image_buffer_opt(worksheet,1,1,data1,sbytes1.size(), &lio);
worksheet_write_string(worksheet, 2, 0, "Ürün Adı", NULL);
workbook_close(workbook);
return a.exec();
}
Теперь я получаю следующий результат:
Первое изображение кажется таким маленьким, а второе находится немного ниже границы. Почему это?
Как вставить изображение в центр ячейки и в пределах ширины и высоты ячейки? Благодарю.
1 ответ
Вы должны установить dpi на 96 (по умолчанию для Excel и других продуктов MS), чтобы оно правильно отображалось в позиции с правильным размером.
поскольку QImage имеет только точку на метр, я преобразовал дюйм в метр, а затем установил dpm следующим образом:
QImage img
img.setDotsPerMeterX(3780);
img.setDotsPerMeterY(3780);
Теперь все работает как надо.