C#Transpose()方法,用于在excel工作表中对行和列进行转置

C#Transpose()方法,用于在excel工作表中对行和列进行转置,c#,.net,excel,c#-4.0,C#,.net,Excel,C# 4.0,我想转换excel工作表的行和列并保存它。为此,我想使用C#transpose()方法。有人能举例说明如何在C#中使用它吗?语法是什么,应该创建什么对象来调用transpose()方法 谢谢。首先,您必须将excel工作表转换为datatable,然后以编程方式转换datatable的行和列。要将excel工作表转换为datatable,您可以在stackoverflow上搜索问题,因为它有许多类似的问题。对于下面的转换datatable,代码起作用 private DataTable Gene

我想转换excel工作表的行和列并保存它。为此,我想使用C#transpose()方法。有人能举例说明如何在C#中使用它吗?语法是什么,应该创建什么对象来调用transpose()方法


谢谢。

首先,您必须将excel工作表转换为datatable,然后以编程方式转换datatable的行和列。要将excel工作表转换为datatable,您可以在stackoverflow上搜索问题,因为它有许多类似的问题。对于下面的转换datatable,代码起作用

private DataTable GenerateTransposedTable(DataTable inputTable)
{
     DataTable outputTable = new DataTable();

     // Add columns by looping rows

     // Header row's first column is same as in inputTable
     outputTable.Columns.Add(inputTable.Columns[0].ColumnName.ToString());

     // Header row's second column onwards, 'inputTable's first column taken
     foreach (DataRow inRow in inputTable.Rows)
     {
         string newColName = inRow[0].ToString();
         outputTable.Columns.Add(newColName);
     }

     // Add rows by looping columns        
     for (int rCount = 1; rCount <= inputTable.Columns.Count - 1; rCount++)
     {
         DataRow newRow = outputTable.NewRow();

         // First column is inputTable's Header row's second column
         newRow[0] = inputTable.Columns[rCount].ColumnName.ToString();
         for (int cCount = 0; cCount <= inputTable.Rows.Count - 1; cCount++)
         {
             string colValue = inputTable.Rows[cCount][rCount].ToString();
             newRow[cCount + 1] = colValue;
         }
         outputTable.Rows.Add(newRow);
     }

     return outputTable;
}
专用数据表GenerateTransposedTable(数据表可输入)
{
DataTable outputTable=新DataTable();
//通过循环行添加列
//标题行的第一列与Inputable中的相同
outputTable.Columns.Add(inputTable.Columns[0].ColumnName.ToString());
//标题行的第二列向前,“采用可输入的第一列”
foreach(inputable.Rows中的数据行inRow)
{
字符串newColName=inRow[0]。ToString();
outputTable.Columns.Add(newColName);
}
//通过循环列添加行

对于(int rCount=1;rCount,您的方法是Excel对象模型的一部分,但通过Visual Studio Tools for Office/Excel DNA/Managed XLL等包含在C#中

Object[,] transposedRange = (Object[,])xlApp.WorksheetFunction.Transpose(rng.Value2);
然后将TransposeSedRange粘贴回Excel:

xlApp.ActiveSheet.Range("A1").Resize(transposedRange.GetUpperBound(0), transposedRange.GetUpperBound(1)) = transposedRange;

转置可以作为PasteSpecial的参数访问(转置:任意)。

我在这里完整地回答了这个问题:

“我想使用C#transpose()方法”-C#是一种编程语言,没有转置方法。当然可能有.NET类库有这样一种方法-你想用哪种方法?检查一下这是转置数据表。有一种方法可以转置excel工作表,transpose()。如果您知道的话,请告诉我用法。这与codeproject.com上的这篇文章中的代码完全相同:适用于转换“数据表”。对我来说,这比使用Excel路径更容易。尝试了其他解决方案(通过InContext),但出现错误“无法隐式转换类型”System.\uu ComObject”为“对象[,]”。谢谢。但什么是xlApp和rng?xlApp是应用程序对象。rng是您的范围,所以范围(“A1:B7”)Value2将其作为对象数组传递。如果您已经将Excel与C#一起使用,您将知道这一点。如果没有,则这是一个超出此问题范围的大主题。抱歉!!请解释什么是Value2。我需要它。Value2将范围作为对象数组传递给Transpose()我已经更新了我的答案,将其显式转换为多维对象数组。上面的所有内容都有效,我刚刚对其进行了测试。