山西念星科贸有限公司 2024-07-24 18:53 采纳率: 72%
浏览 3
已结题

C#ClosedXML库 worksheet.Cell(rowNumberToCheck, i).Value = String.Empty; 没效果

问题遇到的现象和发生背景

C#ClosedXML库 worksheet.Cell(rowNumberToCheck, i).Value = String.Empty; 没效果

用代码块功能插入代码,请勿粘贴截图。 不用代码块回答率下降 50%
public static void DeleteAllContentFromACertainLineInExcelFile(string filePath, string worksheetName, int rowNumberToCheck)
{//实例化:一个新的:推断型,局部变量,并命名为:工作册,用来存储:工作册,并赋值为:实例化一个:XLWorkbook,类,并赋值为:局部变量:保存路径
                using (var workbook = new XLWorkbook(filePath))
                {//声明:一个新的:推断型,局部变量,并命名为:工作表,用来存储:局部变量:工作册,中的名为:参数:工作表名,的值,的工作表,并赋值为:获取:(局部变量:工作册,中的:参数:工作表名,的值)的工作表
                    var worksheet = workbook.Worksheet(worksheetName);
                    //判断:局部变量:工作表,的值,是否:不为:空
                    if (worksheet != null)
                    {//声明:一个新的:整数型,局部变量,并命名为:列号,用来存储:列号,并赋值为:调用:关于Excel操作,中的:获取:Excel文件,中:指定行,中:最后一个:非空列号,方法的返回值,其中方法的参数一为:当前方法的参数:文件路径,的值,其中方法的参数二为:当前方法的参数:工作表名,的值,其中方法的参数三为:当前方法的参数:要检查的行号,的值
                        int rowNumber = AboutExcelOperation.GetLastNonEmptyColumnNumberInRowInTheExcel(filePath, worksheetName, rowNumberToCheck);
                        //判断:局部变量:列号,的值,是否:大于:0
                        if (rowNumber > 0)
                        {//如果:局部变量:列号,的值,大于:0,实例化:一个新的:for,循环语句,并声明:一个:整数型,局部变量,并命名为:i,用来存储:循环次数,并赋值为:1,只要:局部变量:i,的值:大于等于:局部变量:列号,的值,就一直循环,并且每循环一次就将:局部变量:i,的值自减一
                            for (int i = 1; i <= rowNumber; i++)
                            {//为:局部变量:工作表:中的:第:(当前方法的参数:要检查的行号,的值),行,第:(局部变量:i,的值),列,添加:(空值),数据
                                worksheet.Cell(rowNumberToCheck, i).Value = String.Empty;-----查看了,rowNumberToCheck,行全部都还是原来的值,并不是空值
                            }//将:局部变量:工作册,保存
                            workbook.Save();
                        }
                    }//如果:参数:工作表,的值,为:空
                    else
                    {//弹出:一个:消息框,内容为:您输入的工作表不存在,窗体名为:温馨提示
                        MessageBox.Show($"您输入的工作表不存在", "温馨提示");
                    }
                }
}
  • 写回答

3条回答 默认 最新

  • 阿里嘎多学长 2024-07-24 18:53
    关注

    以下内容由AIGC及阿里嘎多学长共同生成、有用望采纳:


    从你提供的代码和描述来看,你希望在指定的行(rowNumberToCheck)中清空所有的单元格内容,但是发现 worksheet.Cell(rowNumberToCheck, i).Value = String.Empty; 这行代码没有效果。

    问题分析

    1. 代码逻辑:你的代码逻辑本身是正确的,通过循环遍历指定行的所有列,并将每个单元格的值设置为 String.Empty
    2. 单元格引用:问题可能出在单元格的引用方式上。在 ClosedXML 中,使用 worksheet.Cell(rowNumberToCheck, i) 时,i 应该是列的索引(从 1 开始),而不是列的字母表示。

    解决方案

    1. 确保列索引正确:确保 i 是从 1 开始的列索引。
    2. 检查工作表是否正确加载:确保 worksheet 变量正确指向了目标工作表。
    3. 保存工作簿:确保在修改完单元格后,调用 workbook.Save() 保存更改。

    修改后的代码示例

    以下是修改后的代码示例,确保列索引从 1 开始,并添加了一些注释来帮助你理解每一步:

    using ClosedXML.Excel;
    using System.Windows.Forms;
    
    public static void DeleteAllContentFromACertainLineInExcelFile(string filePath, string worksheetName, int rowNumberToCheck)
    {
        // 实例化一个新的XLWorkbook对象,并加载指定的Excel文件
        using (var workbook = new XLWorkbook(filePath))
        {
            // 获取指定的工作表
            var worksheet = workbook.Worksheet(worksheetName);
            
            // 判断工作表是否存在
            if (worksheet != null)
            {
                // 获取指定行的最后一个非空列号
                int rowNumber = AboutExcelOperation.GetLastNonEmptyColumnNumberInRowInTheExcel(filePath, worksheetName, rowNumberToCheck);
                
                // 判断列号是否大于0
                if (rowNumber > 0)
                {
                    // 遍历指定行的所有列
                    for (int i = 1; i <= rowNumber; i++)
                    {
                        // 清空指定行的每个单元格内容
                        worksheet.Cell(rowNumberToCheck, i).Value = String.Empty;
                    }
                    
                    // 保存工作簿
                    workbook.Save();
                }
                else
                {
                    // 弹出消息框提示工作表不存在
                    MessageBox.Show($"您输入的工作表不存在", "温馨提示");
                }
            }
            else
            {
                // 弹出消息框提示工作表不存在
                MessageBox.Show($"您输入的工作表不存在", "温馨提示");
            }
        }
    }
    

    注意事项

    • 确保 AboutExcelOperation.GetLastNonEmptyColumnNumberInRowInTheExcel 方法正确返回了指定行的最后一个非空列号。
    • 确保 filePathworksheetNamerowNumberToCheck 参数正确传递到方法中。

    通过这些修改,你的代码应该能够正确清空指定行的所有单元格内容。如果问题仍然存在,请检查 AboutExcelOperation.GetLastNonEmptyColumnNumberInRowInTheExcel 方法的实现,确保它正确返回了期望的列号。

    评论 编辑记录

报告相同问题?

问题事件

  • 已结题 (查看结题原因) 7月28日
  • 创建了问题 7月24日

悬赏问题

  • ¥15 SPSS分类模型实训题步骤
  • ¥15 求解决扩散模型代码问题
  • ¥15 工创大赛太阳能电动车项目零基础要学什么
  • ¥20 limma多组间分析最终p值只有一个
  • ¥15 nopCommerce开发问题
  • ¥15 torch.multiprocessing.spawn.ProcessExitedException: process 1 terminated with signal SIGKILL
  • ¥15 QuartusⅡ15.0编译项目后,output_files中的.jdi、.sld、.sof不更新怎么解决
  • ¥15 pycharm输出和导师的一样,但是标红
  • ¥15 想问问富文本拿到的html怎么转成docx的
  • ¥15 我看了您的文章,遇到了个问题。