如何将Excel列存储到字符串数组并保留空白单元格值
解决Excel空白单元格未存入空字符串的问题
嘿,我明白你的问题了——读取Excel列的时候,空白单元格直接被跳过,导致数组里的位置不对对吧?这是因为用Microsoft.Office.Interop.Excel读取时,空白单元格的值默认是null,如果你的代码只收集了非空值,就会漏掉这些位置。我给你调整下代码,保证空白单元格会被存成空字符串,完美保留原列的结构:
完整示例代码
using Microsoft.Office.Interop.Excel; using System; class ExcelColumnReader { static void Main() { // 初始化Excel应用 Application excelApp = new Application(); // 打开目标工作簿(替换成你的文件路径) Workbook workbook = excelApp.Workbooks.Open(@"C:\YourFile.xlsx"); // 选择目标工作表(替换成你的工作表名称) Worksheet worksheet = workbook.Worksheets["Sheet1"]; // 确定要读取的行数:这里可以手动指定,或者用UsedRange获取实际使用行数 // 比如如果要读取C列所有已使用的行,就用 worksheet.UsedRange.Rows.Count int totalRows = 4; string[] mystring = new string[totalRows]; // 遍历每一行,逐个处理单元格 for (int i = 0; i < totalRows; i++) { // 定位到C列第i+1行(Excel行号从1开始,3代表C列) Range targetCell = worksheet.Cells[i + 1, 3]; // 关键:把null(空白单元格)转换成空字符串,非空值转成字符串 mystring[i] = targetCell.Value != null ? targetCell.Value.ToString() : string.Empty; } // 测试输出结果 foreach (string item in mystring) { int index = Array.IndexOf(mystring, item); Console.WriteLine($"mystring[{index}] = \"{item}\""); } // 务必释放Excel COM资源,避免进程残留 workbook.Close(); excelApp.Quit(); System.Runtime.InteropServices.Marshal.ReleaseComObject(worksheet); System.Runtime.InteropServices.Marshal.ReleaseComObject(workbook); System.Runtime.InteropServices.Marshal.ReleaseComObject(excelApp); } }
关键说明
- 遍历指定范围:不再依赖自动筛选非空值的逻辑,而是逐个遍历你需要的每一行单元格,确保每个位置都被填充
- 处理null值:用三元运算符
targetCell.Value != null ? ... : string.Empty把空白单元格的null值转换成空字符串,这样数组里的位置就和Excel列完全对应了 - 灵活指定行数:如果不知道具体行数,可以用
worksheet.UsedRange.Rows.Count获取工作表中已使用的总行数,但如果C列的空白行在中间,这个方法也能覆盖到
简化版(用LINQ)
如果你喜欢更简洁的写法,可以用LINQ直接转换单元格范围:
// 指定要读取的C列范围(比如C1到C4) Range columnRange = worksheet.Range["C1:C4"]; // 直接转换为字符串数组,自动处理空白单元格 string[] mystring = columnRange.Cast<Range>() .Select(cell => cell.Value != null ? cell.Value.ToString() : string.Empty) .ToArray();
这样处理后,你的数组就会变成mystring[0]="1"、mystring[1]="2"、mystring[2]=""、mystring[3]="3",完全符合你的需求啦!
内容的提问来源于stack exchange,提问作者Romeo
相关产品推荐
相关产品推荐

