nicezyy 2023-09-18 11:41 采纳率: 0%
浏览 8

c++三维数组数据写入excel后不全

double Weight_NDist[NW_M][NW_N][4] = {0.0};
for (i = 0; i < NW_M; i++)
                for (j = 0; j < NW_N; j++)
                    for (k = 0; k < 4; k++) {
                        Weight_NDist[i][j][k] = arrNetworkSL[i][j].Nindex[k];
                        printf("\n\t[%d]: %lf\n", a + 1, Weight_NDist[i][j][k]);
                        a++;
                    }
strcpy(path, "Excel\\Weight_NDist.xlsx");
            strcpy(sheetName, "Weight");
            mywriteDataBlock(Weight_NDist, NW_M, NW_N, 4, path, sheetName);

            // copy the excel file to Artifact folder
            system("echo Source Data Folder: %CD%");
            sprintf(cmd, "copy \"%s\" \"Artifact\\Weight_NDist(b=%.2f_k=%.2f_v=%.2f_del=%.2f_DEL=%.2f)_T(%d-%d)_SL(%d-%d).xlsx\">nul", path, b, kappa, v, del, DEL, 1, mcsTime, NW_N, NW_M); system(cmd);
            printf("\tDestination Data File:\n");
            printf("\t Artifact\\Weight_NDist(b=%.2f_k=%.2f_v=%.2f_del=%.2f_DEL=%.2f)_T(%d-%d)_SL(%d-%d).xlsx\n", b, kappa, v, del, DEL, 1, mcsTime, NW_N, NW_M);

int mywriteDataBlock(double pData[][NW_N][4], int m, int n, int h, char* fullPath, char* sheetName)
{
    int i, j,k;

    /*** mbstowcs --------------------------------------*/
    setlocale(LC_ALL, "zh_CN.UTF-8");
    wchar_t wFullPath[256] = { '\0' };
    wchar_t wSheetName[256] = { '\0' };

    mbstowcs(wFullPath, fullPath, strlen(fullPath));
    mbstowcs(wSheetName, sheetName, strlen(sheetName));

    /*** write data --------------------------------------*/
    // Book* book = xlCreateBook();        // for .xls file
    Book* bookTemp = xlCreateXMLBook();    // xlCreateXMLBook() for .xlsx file
    // unlock the dll by the key
    bookTemp->setKey(L"Michael Hillier", L"windows-222329040ec5ec046fb46767a7h1gej6");

    if (bookTemp)
    {
            Sheet* sheetTemp = bookTemp->addSheet(wSheetName);
            for (i = 0; i < m; i++)
            {
                for (j = 0; j < n; j++)
                {  
                    for (k = 0; k < h; k++)
                        sheetTemp->writeNum(i + 1, j + 1, pData[i][j][k]);
                }

            }
        
    }
    // bookTemp->save(wFullPath);
    bookTemp->save(wFullPath);
    bookTemp->release();
    return EXIT_SUCCESS;
}

Weight_NDist存了40000个数,打印也能打印出40000个

img


但是用mywriteDataBlock函数写入excel就只有10000个数,到底是为什么啊

  • 写回答

1条回答 默认 最新

  • CSDN-Ada助手 CSDN-AI 官方账号 2023-09-18 14:57
    关注

    【以下回答由 GPT 生成】

    你可以尝试使用第三方库来优化Excel写入功能。我的建议是使用LibXL库,它是一个强大的C++库,可以帮助你轻松地读写Excel文件。

    首先,你需要下载和安装LibXL库。你可以在LibXL官方网站上找到相关的下载和安装指南。

    接下来,你需要在你的C++项目中包含LibXL的头文件。你可以使用以下代码来包含头文件:

    #include "libxl.h"
    

    然后,你需要创建一个LibXL的Workbook对象,该对象用于表示Excel文件。你可以使用以下代码来创建Workbook对象:

    libxl::Book* book = xlCreateXMLBook();
    

    然后,你需要创建一个Worksheet对象,该对象用于表示Excel文件中的一个工作表。你可以使用以下代码来创建Worksheet对象:

    libxl::Sheet* sheet = book->addSheet(L"Sheet1");
    

    接下来,你可以使用Worksheet对象的writeNum方法来写入数值数据。你可以使用以下代码将三维数组数据写入Excel文件:

    for (int i = 0; i < NW_M; i++) {
        for (int j = 0; j < NW_N; j++) {
            for (int k = 0; k < 4; k++) {
                sheet->writeNum(i, j * 4 + k, Weight_NDist[i][j][k]);
            }
        }
    }
    

    最后,你需要保存Excel文件并释放相关资源。你可以使用以下代码来保存Excel文件和释放资源:

    book->save(fullPath);
    book->release();
    

    除此之外,你还可以使用LibXL库的其他功能来设置单元格的格式、字体、边框等。你可以参考LibXL的官方文档来了解更多细节。

    希望这个解决方案能帮助到你解决Excel写入不全的问题,并优化Excel写入功能。如果你有任何进一步的问题,请随时提问。


    如果你已经解决了该问题, 非常希望你能够分享一下解决方案, 写成博客, 将相关链接放在评论区, 以帮助更多的人 ^-^
    评论

报告相同问题?

问题事件

  • 创建了问题 9月18日

悬赏问题

  • ¥15 求复现机器学习文章一篇
  • ¥15 爬虫抓取数据|解析视频文本内容(相关搜索:自动化)
  • ¥15 combobox绑定值改变的问题
  • ¥15 from seleniumwire import webdriver 在抓取http://链接的时候会自动转https://这个怎么解决
  • ¥15 hive直连数据库模式插入mysql表数据失败(相关搜索:数据库)
  • ¥30 不会,学习,有偿解答
  • ¥15 SQL查询语句报错(检查)
  • ¥15 此表中公式应该怎么写
  • ¥15 求HI-TECH PICC 9.50 PL3安装包
  • ¥15 下载ctorch报错,求解