将XLSX文件转换为CSV文件C++

将XLSX文件转换为CSV文件C++,c++,csv,xlsx,libopc,C++,Csv,Xlsx,Libopc,我正在尝试使用读取xlsx文件并写入csv文件。xlsx文件包含各种数据类型,文件的结构很重要。 我使用了以下代码来读取SharedString,但我不确定如何将字符串和其他数据类型与正确的结构相关联: #include "stdafx.h" #include <opc/opc.h> #include <stdio.h> // basic file operations #include <iostream> #include <fstream>

我正在尝试使用读取xlsx文件并写入csv文件。xlsx文件包含各种数据类型,文件的结构很重要。 我使用了以下代码来读取SharedString,但我不确定如何将字符串和其他数据类型与正确的结构相关联:

#include "stdafx.h"
#include <opc/opc.h>
#include <stdio.h>
// basic file operations 
#include <iostream> 
#include <fstream> 

using namespace std;

FILE* pFile;

static void dumpSharedrows(mceTextReader_t *reader)
{
#if 0
    xmlChar *ln = xmlStrdup(xmlTextReaderLocalName(reader->reader));
    const char * lnvalue = (const char*)ln;
    if ((strcmp(lnvalue, "si")) == 0) {
        //id3++; 
    }
#endif
    mce_skip_attributes(reader);
    //mce_start_attributes(reader){ }
    //mce_end_attributes(reader);

    mce_start_children(reader)
    {
        mce_start_element(reader, NULL, NULL)
        {
            dumpSharedrows(reader);
        }
        mce_end_element(reader);

        mce_start_text(reader)
        {

            for (const xmlChar *txt = xmlTextReaderConstValue(reader->reader); 0 != *txt; txt++)
            {
                putc(*txt, pFile);
            }
            putc(',', pFile);
            //  putc(*txt, stdout);
            //putc('\n', stdout);
            //remove((const char *)xmlTextReaderConstValue(reader->reader));

            //LOGI("%s", xmlTextReaderConstValue(reader->reader));

        }
        mce_end_text(reader);
    }
    mce_end_children(reader);

}






int _tmain(int argc, _TCHAR* argv[])
{

    const char *filename = "template.csv";
        const char *mode = "w+";
        fopen_s(&pFile, filename, mode);
    opcInitLibrary();
    opcContainer *c = opcContainerOpen(_X("template.xlsx"), OPC_OPEN_READ_ONLY, NULL, NULL);
    if (NULL != c) {
        mceTextReader_t reader;

        if (OPC_ERROR_NONE == opcXmlReaderOpen(c, &reader, _X("xl/sharedStrings.xml"), NULL, 0, 0))
        {
            mce_start_document(&reader)
            {
                mce_start_element(&reader, NULL, NULL)
                {
                    dumpSharedrows(&reader);
                                }
                mce_end_element(&reader);
            }
            mce_end_document(&reader); 
                        mceTextReaderCleanup(&reader);
        }
        opcContainerClose(c, OPC_CLOSE_NOW);
    }
    opcFreeLibrary();
    fclose(pFile);
    return 0;
}

任何帮助或建议都将不胜感激。

如果您正在构建一个小型转换器,为什么不为该工作使用更合适的工具呢?C/Ruby/其他任何东西,但不是正在成为选项的C++,但我仍然需要在我的MFC/C++应用程序中使用它。我在linux中使用这一点:您也可以从mfc应用程序绑定或调用任何语言。只是为了说明抽象层次之间的差异:这似乎是最简单的方法: