【问题标题】:Interop Excel UsedRange互操作 Excel UsedRange
【发布时间】:2012-10-04 04:21:10
【问题描述】:

我通过 C# 中的互操作 excel 对象使用 UsedRange 来获取工作表的最后一行。工作表是新创建的,仅编辑了 Name 属性。但是,当我得到 ws.UsedRange.Rows.Count 时,我得到了超过 10k。为什么这不给我 0 或 1?我怎样才能得到真正的最后一行?

Application xlApp = null;
            Worksheet temp;
            Range cell;
            int row;
            int col;
            int i;
                xlApp = new Application();
                xlApp.Visible = true;
                Workbook wbDetail = xlApp.Workbooks.Add();
                wbDetail.Worksheets.Add(Type.Missing, Type.Missing, 26, XlWBATemplate.xlWBATWorksheet);  
                i = 0;
                while(i < 29)
                {
                    temp = (Worksheet)wbDetail.Worksheets[i+1];
                    temp.Name = "TITLE_"+i
                    i++;
                }

         DateTime reqdate;
         i=0;
         while(i<29)
                {
                        temp = (Worksheet)wbDetail.Worksheets["TITLE_"+i];
                        int j = 0;
                        temp.get_Range("A1", Type.Missing).Value = "TITLE STUFF";
                        row = temp.UsedRange.Rows.Count;
                        while(j < 50)
                        {
                            cell = (Range)temp.Cells[row+1, j+1];
                            cell.Value = j;
                            j++;
                        }
                    }
                   i++
                }
                wbDetail.Save();

【问题讨论】:

  • 我已经编辑了你的标题。请参阅“Should questions include “tags” in their titles?”,其中的共识是“不,他们不应该”。
  • 也许您应该分享您用于生成工作簿并更新名称的代码,以便我们可以实际调查而不是推测。
  • @DanielCook 发布在上面。代码很简单。

标签: c# excel interop


【解决方案1】:

在某些条件下(不确定它们是什么),Excel 将具有“已使用”的行,这些行没有任何实际值(除了空白、null 等)。

我过去这样做的方法是将工作表的值加载到数组中*,然后向后循环遍历数组的行,直到其中一列具有非空白值。

*- 我强烈建议不要在循环中调用Cells[i,j]。加载数组中的值,然后遍历数组:

var tempValues = temp.Value;
...
while(j < 50)
{
    tempValues[row+1, j+1] = j
    j++;
}
temp.Value = tempValues

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2012-06-09
    • 2010-12-27
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多