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

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 做个有关计算的小程序
  • ¥15 MPI读取tif文件无法正常给各进程分配路径
  • ¥15 如何用MATLAB实现以下三个公式(有相互嵌套)
  • ¥30 关于#算法#的问题:运用EViews第九版本进行一系列计量经济学的时间数列数据回归分析预测问题 求各位帮我解答一下
  • ¥15 setInterval 页面闪烁,怎么解决
  • ¥15 如何让企业微信机器人实现消息汇总整合
  • ¥50 关于#ui#的问题:做yolov8的ui界面出现的问题
  • ¥15 如何用Python爬取各高校教师公开的教育和工作经历
  • ¥15 TLE9879QXA40 电机驱动
  • ¥20 对于工程问题的非线性数学模型进行线性化