C++ XSLXWriter在列的单元格中心插入多个图像

C++ XSLXWriter在列的单元格中心插入多个图像,c++,qt,xlsx,libxlsxwriter,C++,Qt,Xlsx,Libxlsxwriter,我试图使用libxlsxwriter在一列中逐行插入图像,但这些图像超出了单元格范围,并且彼此重叠 编辑: 我发现这行代码可能导致了一些问题工作表\设置\默认\行(工作表,110,true) 并将我的代码更改为以下内容: #include <QCoreApplication> #include "QProcess" #include "QThread" #include "xlsxwriter.h" #include <

我试图使用libxlsxwriter在一列中逐行插入图像,但这些图像超出了单元格范围,并且彼此重叠

编辑:

我发现这行代码可能导致了一些问题
工作表\设置\默认\行(工作表,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();
}
#包括
#包括“QProcess”
#包括“QThread”
#包括“xlsxwriter.h”
#包括
#包括
#包括
int main(int argc,char*argv[])
{
qcorea应用程序(argc、argv);
QImage*img=新的QImage(“F:/Muaz/Programming/visualc++/Qt/web\u browser\u open\u close/Image0004.jpg”);
int像素_宽度=int(25*7+0.5)+5;
int像素_高度=int(4.0/3.0*110);
QImage scaled_img=img->scaled(像素宽度、像素高度、Qt::keepasspectratio);
int new_h=缩放的img.height();
int new_w=缩放的img.width();
QByteArray sbytes;
QBuffer缓冲区(&sbytes);
打开(QIODevice::WriteOnly);
缩放图像保存(&buffer,“jpg”);
buffer.close();
unsigned char*data=新的unsigned char[sbytes.size()];
memcpy(数据,sbytes.constData(),sbytes.size());
QImage*img1=新的QImage(“F:/Muaz/Programming/visualc++/Qt/web_browser_open_close/Image0003.jpg”);
QImage scaled_img1=img1->scaled(像素宽度、像素高度、Qt::keepasspectratio);

qInfo()您必须将dpi设置为96(excel和其他MS产品的默认设置),以便以正确的大小正确显示在位置上

由于QImage仅设置了每米点数,我将英寸转换为米,然后按如下方式设置dpm:

QImage img

img.setDotsPerMeterX(3780);
img.setDotsPerMeterY(3780);
现在每件事都在按它应该的方式进行