【问题标题】:Blank cell is ignored and overwritten in Excel.Range using InteropExcel.Range 中使用 Interop 忽略并覆盖空白单元格
【发布时间】:2015-01-13 18:09:29
【问题描述】:

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

分割后的文件如下所示:

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

我想我需要检查一个单元格是否为空或空,并在写入过程中将空/空值放入新文件。问题是如何将其合并到我的以下代码中?

    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;
    }

【问题讨论】:

    标签: c# excel excel-interop cells


    【解决方案1】:

    这是因为文档结构具有避免浪费空间的内置效率。您必须检查单元格的参考(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.......
    

    【讨论】:

    • 我刚刚意识到我的代码正在使用 Open XML SDK,而您正在使用 Interop。然而,问题可能是相同的。您应该能够找到单元格的单元格引用,以便知道它是哪一列。
    • 作为这方面的新手,我只能使用代码来工作。您能否对我的代码发表评论并指出如何改变它的方向?
    【解决方案2】:

    找到解决办法:

                    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
    

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 1970-01-01
      • 2018-11-20
      • 1970-01-01
      • 2014-08-19
      • 2020-02-05
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      相关资源
      最近更新 更多