使用C#写入excel中的新列

时间:2011-10-03 14:58:09

标签: c# excel

我对微软的互操作库有点困惑。它看起来并不那么直观,我认为如果他们只是坚持使用多维数组,那么这将是一个更好的库。尽管如此,我对如何使用C#写入列感到困惑。如何迭代单个列并将数据放入每个列中。更好的问题是,如何在Excel中循环遍历单个excel列。我基本上试图循环遍历列,并根据第一列中的值将数据添加到其他列。我是否会将所有数据拉出来并将其放入某种数据结构(很可能是数组)中,然后将其重新设置为Range或类似的东西?有点困惑。这是我用来创建新列的代码,我需要填充从同一行中的其他列获取的数据......

    public static void setUpSheet(Worksheet wkSheet)
    {
        Range rng = (Range)wkSheet.get_Range("A1", Type.Missing);
        rng.EntireColumn.Insert(XlInsertShiftDirection.xlShiftToRight,
                                XlInsertFormatOrigin.xlFormatFromRightOrBelow);
        wkSheet.Range["A1", Type.Missing].Value2 = "R_EMPIID";

        Range rng2 = (Range)wkSheet.get_Range("A1", Type.Missing);
        rng2.EntireColumn.Insert(XlInsertShiftDirection.xlShiftToRight,
                                XlInsertFormatOrigin.xlFormatFromRightOrBelow);
        wkSheet.Range["A1", Type.Missing].Value2 = "PopulationID";

        Range rng3 = (Range)wkSheet.get_Range("A1", Type.Missing);
        rng3.EntireColumn.Insert(XlInsertShiftDirection.xlShiftToRight,
                                XlInsertFormatOrigin.xlFormatFromRightOrBelow);
        wkSheet.Range["A1", Type.Missing].Value2 = "PopPatID";

        wkSheet.SaveAs("C:\\CorrectDirectory\\App_Data\\test", Type.Missing, Type.Missing, Type.Missing, Type.Missing, Type.Missing, Type.Missing, Type.Missing, Type.Missing, Type.Missing);            
    }

所以我可以添加一个新列并命名该列,现在我只需要弄清楚如何从其他列中获取正确的数据并将它们放在该行的另一列中(这些列将是新列I刚刚在这里创建)。有什么想法吗?

更新:尝试更具体 我知道你可以在excel列中获得一系列值。但是无法知道数据集的大小。例如

    (Excel.Range)excelWorksheet.get_Range("A5:A35", Type.Missing);

这将为您提供包含数据的一系列列。但是,让我们说你还没有看过excel文件。如果您不知道其中有多少行,您将如何遍历该列中所有的行?或者你应该只做一个捕捉,然后做.get_Range(A2:A10000,Type.Missing)。之后,您将如何更改完全相同的行但在不同的列中?

1 个答案:

答案 0 :(得分:1)

我认为处理映射的最简单方法是创建一个函数来将基于0的整数列映射到Excel列名:例如。 0,1,2,... 26,27,28 => A,B,C ...... AA,AB,AC。 (您可能需要也可能不需要反向映射)。

因此,您知道任何单元格地址< alpha>< numeric>变为< column>< row>。

前面有一些额外的工作,他们没有提供基于索引的范围,但如果你开始使用高级公式,你仍然会进行这种映射。

----根据更新后的问题编辑-----

我相信Worksheet.Cells.WidthWorksheet.Cells.Height可能在这里有用。工作表可能包含大量空单元格,但它至少应该是一个起点。

注意:我正在查看lib类型的第12版,不确定您的版本是什么......