Warning: file_get_contents(/data/phpspider/zhask/data//catemap/5/excel/25.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
C# 使用C编写excel中的新列#_C#_Excel - Fatal编程技术网

C# 使用C编写excel中的新列#

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

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

    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);            
    }
因此,我可以添加一个新列并命名该列,现在我只需要弄清楚如何从其他列中获取正确的数据,并将它们放在该行的另一列中(这些列将是我刚才创建的新列)。有什么想法吗

更新:尝试更具体一些 我知道您可以在excel列中获取一系列值。但无法知道数据集有多大。比如说

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

这将得到一系列包含数据的列。但是,假设您以前没有看过excel文件。如果您不知道该列中有多少行,您将如何循环该列中的所有行?或者你应该只做一个全面的,只做。获取范围(A2:A10000,键入。缺失)。然后,如何更改完全相同的行但在不同的列中?

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

这样就很容易在单元格地址和行/列索引之间创建映射函数,因为您知道任何单元格地址都会变为

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

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

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


注意:我正在查看类型库的版本12,不确定您使用的是哪个版本…

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

这样就很容易在单元格地址和行/列索引之间创建映射函数,因为您知道任何单元格地址都会变为

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

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

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


注意:我正在查看类型库的版本12,不确定您使用的是哪个版本…

FYI,该语言名为“C#”,而不是“CSharp”。这是真的。用语音写出我希望的符号没有问题吗?有没有理由用语音而不是正确地拼写某个东西?嗯,我想当我过去搜索C#时我受不了了(@John,你有点太夸张了。:)仅供参考,这种语言名为“C#”,而不是“CSharp”。这是真的。用语音写出我希望的符号没有问题吗?有没有理由用语音而不是正确地拼写某个东西?嗯,我想我无法忍受我过去搜索C#(@John,你有点太夸张了。:)我不会在这个特定项目中使用高级公式,但如果我再次被迫这样做,我会记住这一点。我正在尝试使用版本12。我不会在这个特定项目中使用高级公式,但如果我再次被迫这样做,我会记住这一点。我正在尝试使用版本12。