代码之家  ›  专栏  ›  技术社区  ›  mj1261829

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

  •  0
  • mj1261829  · 技术社区  · 4 年前

    我试图使用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();
    }
    

    现在我得到以下输出:

    enter image description here

    第一幅图像看起来很小,而第二幅图像略低于边界线。这是为什么?

    如何在单元格的中心以及单元格宽度和高度的范围内插入图像?谢谢。

    0 回复  |  直到 4 年前
        1
  •  1
  •   mj1261829    4 年前

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

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

    QImage img
    
    img.setDotsPerMeterX(3780);
    img.setDotsPerMeterY(3780);
    

    现在一切都在正常运转。