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个数,到底是为什么啊

【以下回答由 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写入功能。如果你有任何进一步的问题,请随时提问。


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