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

C#如何将ComboBox组合框的多个选项值全部保存到CSV文件

C# ComboBox多选项导出Excel解决方案

问题根因

你目前仅能导出第一个值的核心原因是:导出代码仅读取了ErrorTypeCombo.SelectedItem和ErrorIdentCombo.Text,这两个属性仅返回ComboBox当前选中的项(你在粘贴逻辑末尾还手动将SelectedIndex设为0,所以永远只会取到第一项),你提取到的所有其余数据都存储在ComboBox的Items集合中未被遍历读取。

修复步骤

1. 先修复现有代码语法错误

你粘贴逻辑中有一行缺少右括号,会导致编译失败,先修正:

// 原错误代码
errorStart = aosinformation.Substring(var1, 400).IndexOf("notam";
// 修正后代码
errorStart = aosinformation.Substring(var1, 400).IndexOf("notam");

2. 修改导出逻辑,遍历所有选项写入

将原有导出部分的代码替换为如下内容,会自动将所有提取到的错误逐行写入Excel:

Excel.Workbook xlworkbook;
Excel.Worksheet xlworksheet;
object misValue = System.Reflection.Missing.Value;

xlworkbook = xlap.Workbooks.Add(misValue);
xlworksheet = (Excel.Worksheet)xlworkbook.Worksheets.get_Item(1);

Excel.Sheets worksheets = xlworkbook.Worksheets;
Range rg = (Excel.Range)xlworksheet.Cells[1, 2];
rg.EntireColumn.NumberFormat = "YYYY-MM-DD";

// 写入第一行固定字段信息
xlworksheet.Cells[1, 1] = textBox1.Text;
xlworksheet.Cells[1, 2] = dateTimePicker1.Value;
xlworksheet.Cells[1, 3] = textBox2.Text.ToUpper();
xlworksheet.Cells[1, 4] = textBox3.Text.ToUpper();
xlworksheet.Cells[1, 5] = textBox4.Text.ToUpper();
xlworksheet.Cells[1, 6] = comboBox1.Text;

// 遍历所有错误项逐行写入,两个ComboBox的项是成对添加的,数量一致
if (ErrorTypeCombo.Items.Count == ErrorIdentCombo.Items.Count)
{
    // 从第二行开始写入错误信息,第一行已经写入固定字段
    for (int i = 0; i < ErrorTypeCombo.Items.Count; i++)
    {
        int rowNum = i + 2;
        xlworksheet.Cells[rowNum, 7] = ErrorTypeCombo.Items[i].ToString();
        xlworksheet.Cells[rowNum, 8] = ErrorIdentCombo.Items[i].ToString();
    }
}

// 此处补充你原有Excel保存、关闭的逻辑即可,注意释放COM对象避免Excel进程残留

可选优化建议

作为新手可以额外定义数据存储结构,不要直接依赖控件存储业务数据,逻辑会更清晰:

  1. 先在窗体类中定义错误信息类和全局存储列表
public class ErrorRecord
{
    public string ErrorType { get; set; }
    public string ErrorIdent { get; set; }
}
// 全局变量
List<ErrorRecord> AllErrors = new List<ErrorRecord>();
  1. 粘贴提取时同时往列表和ComboBox中添加数据
// 原添加逻辑
ErrorTypeCombo.Items.Add(errorType);
ErrorIdentCombo.Items.Add(errorIdent);
// 新增行
AllErrors.Add(new ErrorRecord { ErrorType = errorType, ErrorIdent = errorIdent });
  1. 导出时直接遍历AllErrors列表即可,不用依赖控件取值。

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.09.28 10:54:04