You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

C#中如何用GemBox.Spreadsheet将NumericUpDown值写入CSV指定单元格?

问题:修改CSV中已存在的指定单元格内容(使用GemBox.Spreadsheet)

当前代码可获取NumericUpDown的值并写入CSV,但仅能追加至表格底部。需求是使用该值修改CSV文件中已存在的指定单元格内容,通过GemBox.Spreadsheet库将CSV加载为Excel工作簿编辑后保存为CSV格式。

原代码

if (int.TryParse(kit_csv_quantity.Text, out int kitOut))
{
    decimal kitOutValue = kitOut + kits_upDown.Value;
    kit_csv_quantity.Text = kitOutValue.ToString();
    ItemLine IL = new ItemLine();
    kitOutValue = IL.Quantity;
    allItems.Add(IL);
    
    SpreadsheetInfo.SetLicense("FREE-LIMITED-KEY");
    var workbook = ExcelFile.Load(@"C:\Users\carson.sumner\Desktop\PSP Kanban Program\Backend Files\Kits_be.csv", new CsvLoadOptions(CsvType.CommaDelimited));
    var worksheet = workbook.Worksheets[0];
    var row = worksheet.Rows[worksheet.Rows.Count];
    var column = worksheet.Columns[worksheet.Columns.Count];

    var searchText = kit_csv_quantity.Text;
    var range = worksheet.Cells.GetSubrange("C2:C25");

    row.Cells[2].Value = searchText;

    workbook.Save("Output.csv", new CsvSaveOptions(CsvType.CommaDelimited));
}

修改后的代码方案

方式1:直接指定目标单元格位置

如果明确知道要修改的单元格行号和列号(注意:GemBox中行列索引从0开始),可以直接定位修改:

if (int.TryParse(kit_csv_quantity.Text, out int kitOut))
{
    decimal kitOutValue = kitOut + kits_upDown.Value;
    kit_csv_quantity.Text = kitOutValue.ToString();
    ItemLine IL = new ItemLine();
    kitOutValue = IL.Quantity;
    allItems.Add(IL);
    
    SpreadsheetInfo.SetLicense("FREE-LIMITED-KEY");
    var workbook = ExcelFile.Load(@"C:\Users\carson.sumner\Desktop\PSP Kanban Program\Backend Files\Kits_be.csv", new CsvLoadOptions(CsvType.CommaDelimited));
    var worksheet = workbook.Worksheets[0];

    // 示例:修改第3行(索引2)第3列(索引2,对应C列)的单元格
    int targetRowIndex = 2;
    int targetColumnIndex = 2;
    worksheet.Rows[targetRowIndex].Cells[targetColumnIndex].Value = kitOutValue.ToString();

    workbook.Save(@"C:\Users\carson.sumner\Desktop\PSP Kanban Program\Backend Files\Kits_be.csv", new CsvSaveOptions(CsvType.CommaDelimited));
}

方式2:根据条件查找目标单元格

如果需要根据某列的特定值找到对应的行,再修改目标列内容(比如根据A列的物料编号找到行,修改C列的数量):

if (int.TryParse(kit_csv_quantity.Text, out int kitOut))
{
    decimal kitOutValue = kitOut + kits_upDown.Value;
    kit_csv_quantity.Text = kitOutValue.ToString();
    ItemLine IL = new ItemLine();
    kitOutValue = IL.Quantity;
    allItems.Add(IL);
    
    SpreadsheetInfo.SetLicense("FREE-LIMITED-KEY");
    var workbook = ExcelFile.Load(@"C:\Users\carson.sumner\Desktop\PSP Kanban Program\Backend Files\Kits_be.csv", new CsvLoadOptions(CsvType.CommaDelimited));
    var worksheet = workbook.Worksheets[0];

    // 假设要查找A列(索引0)中值为"Kit001"的行,修改对应C列(索引2)的内容
    string targetIdentifier = "Kit001";
    foreach (var row in worksheet.Rows)
    {
        // 跳过表头行(如果有)
        if (row.Index == 0) continue;
        
        if (row.Cells[0].Value.ToString() == targetIdentifier)
        {
            row.Cells[2].Value = kitOutValue.ToString();
            break; // 找到目标行后退出循环
        }
    }

    workbook.Save(@"C:\Users\carson.sumner\Desktop\PSP Kanban Program\Backend Files\Kits_be.csv", new CsvSaveOptions(CsvType.CommaDelimited));
}

关键修改点说明

  • 移除了原代码中获取最后一行的追加逻辑,改为定位已存在的单元格
  • 保存时可选择覆盖原CSV文件或保存为新文件
  • 行列索引从0开始,需注意表头行的处理(如果CSV包含表头)

内容的提问来源于stack exchange,提问作者Csumner

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.08.12 03:42:05