使用c#在excel中写入新列

本文关键字:新列 excel 使用 | 更新日期: 2023-09-27 18:10:30

我对微软的互操作库有点困惑。它看起来不那么直观,我认为如果他们坚持使用多维数组,这将是一个更好的库。话虽如此,我对如何使用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);            
    }

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

UPDATE:尝试更具体我知道您可以在excel列中获得一系列值。但是没有办法知道数据集有多大。例如

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

这将为您提供一系列包含数据的列。但是,假设你之前没有看过excel文件。如果不知道列中有多少行,如何循环遍历ALL ?或者,您应该执行一个捕获全部并执行. get_range (A2:A10000,Type.Missing)。在那之后,你如何改变完全相同的行,但在不同的列?

使用c#在excel中写入新列

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

创建单元格地址和行/列索引之间的映射函数非常容易,因为您知道对于任何单元格地址成为& lt; column> & lt; row>

这是一个额外的工作,他们不提供基于索引的范围,但如果你开始做高级公式,你会做这个映射。

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

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

注意:我正在看类型库的版本12,不确定你在什么版本…