vip莉 2022-11-23 14:48 采纳率: 62.5%
浏览 93
已结题

C语言如何实现xlsx文件读写

磁盘中存在文件A.xlsx,其中sheet1(5,5)已写入文本“hello”,如何实现在该文件的sheet1(5,6)写入“world”?
库:libxl免费试用版(linux)
尝试如下:

      string file_name = "/home/demo/Documents/test_libxl.xlsx";
      Book *book = xlCreateBook();
      book->load(file_name.c_str());
      Sheet *sheet = book->getSheet(0);
      sheet->writeStr(5, 6, "World");
      book->save(file_name.c_str());
      book->release(); 

在writeStr时报错
libxl可以支持修改.xlsx文件吗?或者还有其他库可以实现该功能吗?

  • 写回答

4条回答 默认 最新

  • 千册 Linux领域新星创作者 2022-11-26 23:18
    关注

    libxl能修改.xlsx文件,
    但是有要求,这个文件必须是用xlsx文件创建的,且不能被windows的WPS修改,这是测试的时候遇到的问题。也不知道这些问题是不是都会遇到

    然后先看看你这个代码问题出在哪里了,你这代码几乎没有问题,改完初始化函数就OK了:

    void test_2()
    {
          //String file_name = "my.xlsx";
          char file_name[100] = "my.xlsx";
          Book *book = xlCreateXMLBook();//主要是改这里,其他的几乎都没动。
          book->load(file_name);
          Sheet *sheet = book->getSheet(0);
          sheet->writeStr(5, 6, "World");
          book->save(file_name);
          book->release(); 
    }
    
    int main()
    {
        test_2();
        return 0;
    }
    
    

    下面是C语言实现的。C语言也可以写。

    char *file_name = "hello.xlsx";
    void test_3()
    {
        BookHandle book = xlCreateXMLBook();
        DEBUG_INFO("hello world book = %p\n",book);
        if(book) 
        {        
            DEBUG_INFO("xlCreateBook ok");
            if(xlBookLoad(book, file_name)) 
            {
                DEBUG_INFO("xlBookLoad ok");
                SheetHandle sheet = xlBookGetSheet(book, 0);
                if(sheet)
                {                
                    xlSheetWriteStr(sheet, 5,5 , "hello", 0);     
                    xlSheetWriteStr(sheet, 5,6, "world", 0);  
                }else{
                    DEBUG_INFO("error");
                    exit(-1);
                }
    
                if(xlBookSave(book, file_name)){
                    DEBUG_INFO("save %s ok",file_name);
                }else{
                    DEBUG_INFO("save %s error",file_name);
                }
            }else{
                DEBUG_INFO("xlBookLoad error");
            } 
    
            xlBookRelease(book);
        }else{
            DEBUG_INFO("xlCreateBook error");
        }
    }
    
    int main()
    {
        test_3();
        return 0;
    }
    
    

    再考虑你的代码:

          string file_name = "/home/demo/Documents/test_libxl.xlsx";
          Book *book = xlCreateBook();
          book->load(file_name.c_str());
          Sheet *sheet = book->getSheet(0);
          sheet->writeStr(5, 6, "World");
          book->save(file_name.c_str());
          book->release(); 
    
    
    本回答被题主选为最佳回答 , 对您是否有帮助呢?
    评论 编辑记录
查看更多回答(3条)

报告相同问题?

问题事件

  • 系统已结题 12月7日
  • 已采纳回答 11月29日
  • 赞助了问题酬金15元 11月24日
  • 修改了问题 11月24日
  • 展开全部

悬赏问题

  • ¥15 echarts动画效果失效的问题。官网下载的例子。
  • ¥60 许可证msc licensing软件报错显示已有相同版本软件,但是下一步显示无法读取日志目录。
  • ¥15 Attention is all you need 的代码运行
  • ¥15 一个服务器已经有一个系统了如果用usb再装一个系统,原来的系统会被覆盖掉吗
  • ¥15 使用esm_msa1_t12_100M_UR50S蛋白质语言模型进行零样本预测时,终端显示出了sequence handled的进度条,但是并不出结果就自动终止回到命令提示行了是怎么回事:
  • ¥15 前置放大电路与功率放大电路相连放大倍数出现问题
  • ¥30 关于<main>标签页面跳转的问题
  • ¥80 部署运行web自动化项目
  • ¥15 腾讯云如何建立同一个项目中物模型之间的联系
  • ¥30 VMware 云桌面水印如何添加