C# 在Excel.Range中使用互操作忽略并覆盖空白单元格

C# 在Excel.Range中使用互操作忽略并覆盖空白单元格,c#,excel,excel-interop,cells,C#,Excel,Excel Interop,Cells,将数据保存在excel文件中,如下所示,其中第1行和第2行被视为标题行,当根据第一列拆分此特定文件时,将复制标题行 拆分后的文件如下所示: 问题是在这种情况下,D列的值被复制到了错误的C列 我假设我需要检查一个单元格是空的还是空的,并在写入期间将blank/null值放入新文件。问题是如何将其合并到我的以下代码中 private FileEntity GetFileObject(Excel.Range range) { FileEntity fileEntity

将数据保存在excel文件中,如下所示,其中第1行和第2行被视为标题行,当根据第一列拆分此特定文件时,将复制标题行

拆分后的文件如下所示:

问题是在这种情况下,D列的值被复制到了错误的C列

我假设我需要检查一个单元格是空的还是空的,并在写入期间将blank/null值放入新文件。问题是如何将其合并到我的以下代码中

    private FileEntity GetFileObject(Excel.Range range)
    {
        FileEntity fileEntity = new FileEntity();
        fileEntity.RowValues = new List<RowEntity>();

        for (int rowCount = 1; rowCount <= range.Rows.Count; rowCount++)
        {
            RowEntity rowEntity = new RowEntity();
            rowEntity.ColumnValues = new List<string>();

            for (int columnCount = 1; columnCount <= range.Columns.Count; columnCount++)
            {
                if ((range.Cells[rowCount, columnCount] as Excel.Range).Value != null)
                {
                    rowEntity.ColumnValues.Add((range.Cells[rowCount, columnCount] as Excel.Range).Value.ToString());
                }
            }
            fileEntity.RowValues.Add(rowEntity);
        }
        return fileEntity;
    }

这是因为文档结构具有内置的效率,可以避免浪费空间。您必须检查电池的参考A1、B1等,然后才能知道它来自何处以及如何处理

      int rowIdx = 0;

      foreach (Row r in sheetData.Elements<Row>().Skip(1))
      {
        rowIdx++;
        IEnumerable<Cell> thisRow = r.Elements<Cell>();

        foreach (var c in thisRow)
        {
          //This will tell you what cell you are looking at (A2, D14, whatever..)
          string cellRef = c.CellReference.ToString().Substring(0, 1);

          switch (cellRef)
          {
            case "A": 
              //do something...
              break;
            case "B": 
              //do something...
              break;
            case "C": 
              //do something...
              break;
        ....ETC.......
找到解决方案:

                if ((range.Cells[rowCount, columnCount] as Excel.Range).Value != null)
                {
                    rowEntity.ColumnValues.Add((range.Cells[rowCount, columnCount] as Excel.Range).Value.ToString());
                }
                else
                    rowEntity.ColumnValues.Add(""); //just add this line. keeps the blank cell as created with empty string

我刚刚意识到我的代码使用的是开放式XML SDK,而您使用的是互操作。然而,问题可能是相同的。你应该能够找到一个单元格的单元格引用,这样你就知道它是什么列了。作为一个新手,我可以很好地使用代码来工作。请您对我的代码进行评论,并指出如何更改代码的方向,好吗?