簡體   English   中英

使用Interop在Excel.Range中將忽略並覆蓋空白單元格

[英]Blank cell is ignored and overwritten in Excel.Range using Interop

數據在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;
    }

這是因為文檔結構具有內置的效率,可以避免浪費空間。 您必須檢查單元以供參考(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

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM