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

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日
  • 展开全部

悬赏问题

  • ¥70 类鸟群Boids——仿真鸟群避障的相关问题
  • ¥15 CFEDEM自带算例错误,如何解决?
  • ¥15 有没有会使用flac3d软件的家人
  • ¥20 360摄像头无法解绑使用,请教解绑当前账号绑定问题,
  • ¥15 docker实践项目
  • ¥15 数电几道习题,写出作答过程,ai一律不采用
  • ¥15 利用pthon计算薄膜结构的光导纳
  • ¥15 海康hlss视频流怎么播放
  • ¥15 Paddleocr:out of memory error on GPU
  • ¥30 51单片机C语言数码管驱动单片机为AT89C52