
如图,图中数据已存入Datatable,改表的cloum很多有64列,现在想根据cloumName6对其他多列进行分类合计并存入新的DataTable中。新表也要是64列。PS:根据cloumName6对其他多列进行分类合计时,只对含数字的列进行合计。

引自免费微信小程序:皆我百晓生
要解决这个问题,我们可以通过以下步骤操作:
DataTableReader类完成)。在C#中,我们可以使用以下代码来实现这个任务:using System.Data;
using System.IO;
public void ReadDataFromDataTable(string filePath)
{
// 创建一个DataTable对象
DataTable dataTable = new DataTable();
// 使用StreamReader类读取Excel文件中的数据
using (StreamReader reader = File.OpenText(filePath))
{
// 分割行和列名
string[] rows = reader.ReadToEnd().Split('\n');
string[] columns = rows[1].Split(',');
// 将每一列拆分为数组
foreach (string column in columns)
{
string[] rowValues = row.Split(',');
dataTable.Columns.Add(column.Trim());
dataTable.Rows.Add(rowValues);
}
}
// 将DataTable保存为CSV文件
// 在这里假设我们已经有了一个名为"data.csv"的文件,并且包含以下列标题:
// - cloumName: 具体的column名称
// - columnValue: 值
// ...
using (StreamWriter writer = File.CreateText("data.csv"))
{
// 将Table转化为CSV格式
writer.WriteLine("{0},{1}", "cloumName", "columnValue");
foreach (DataRow row in dataTable.Rows)
{
for (int i = 0; i < dataTable.Columns.Count; i++)
{
writer.Write(row[i].ToString() + ",");
}
writer.WriteLine();
}
}
}
这段代码首先创建了一个DataTable对象,然后通过StreamReader读取Excel文件中的数据。由于Excel文件可能具有嵌套的表格结构,我们使用了 Split('\n')方法来分割行和列名,这确保我们能够正确地解析每一行。
接下来,我们将每一列拆分为数组,其中每一项代表一个行值,数组的第一元素是列名,第二元素是对应的数值。这些值被添加到新DataTable的相应列中,作为包含数字值的行数据。
注意,这只是一个基础的示例,实际应用可能会涉及到更复杂的数据处理逻辑,例如填充缺失值、进行筛选和排序等。具体的操作方式取决于你的业务需求和个人偏好。
为了对所有列进行分类汇总,你需要实现以下功能:
以下是将上述步骤整合在一起的代码实现:
using System.Collections.Generic;
using System.Data;
using System.Linq;
using System.IO;
public class CloumNameCategoryAggregator
{
public static void Main(string[] args)
{
// 读取DataTable中的数据
string filePath = "path/to/data.xlsx";
ReadDataFromDataTable(filePath);
// 定义汇总列
string[] summarizedColumns = { "col1", "col2", "col3", "col4", "col5", "col6" };
string汇总ColumnName = "summary_column";
// 更新原始DataTable
var updatedDataTable = new DataTable();
foreach (var tableName in DataContract蛟龙体.AllNamespaces())
{
if (!updatedDataTable.Contains(tableName))
{
updatedDataTable.Add(tableName, GenerateSummaryData(tableName));
}
}
// 输出汇总数据
Console.WriteLine($"Cloum Name\tSummarized Column Value");
foreach (var table in updatedDataTable)
{
foreach (var category in table[nameof(table)])
{
Console.WriteLine($"{category}\t{table[category]}");
}
}
}
private static string GenerateSummaryData(string tableName)
{
// 生成一个空的汇总列
var summaryColumn = GenerateSummaryColumn(tableName);
return $"{tableName}, Summarized Column Value: {summaryColumn}";
}
private static string GenerateSummaryColumn(string tableName)
{
List<string> summarizedColumnsList = new List<string>();
// 获取原始表格中不为空的列
var columns = ExtractNonEmptyColumnsFromDataTable(tableName);
foreach (var column in columns)
{
// 如果当前列不包含'summarized_column'列,则将其添加到列表中
if (!summaryColumnsList.Contains(column.Trim()))
{
summarizedColumnsList.Add(column.Trim());
}
}
// 拼接汇总列名和值
return $"{tableName}. Summarized Column Values: {String.Join(", ", summarizedColumnsList)}";
}
private static IEnumerable<string[]> ExtractNonEmptyColumnsFromDataTable(string tableName)
{
var rows = DataTable.OpenCursor命名为(tableName) as DataTable;
while (rows.MoveNext())
{
var currentRow = rows.Current;
var columns = currentRow.Columns.Cast<DataColumn>()
.Where(c => c.Name != "summarized_column")
.ToArray();
yield return columns;
}
}
}
这个程序首先读取Excel文件中的数据,然后定义了一个汇总列名称和一个包含汇总值的列。它首先从原始DataTable中获取不为空的列,并检查这些列是否已经包含与汇总列相关的列。如果有,它就将这些列添加到汇总列的列表中,并使用拼接字符串的方法生成汇总列的名称和值。
最后,它遍历原始DataTable中的所有列,并对于每个不为空的列,都会查找是否存在与汇总列相关联的列,如果存在,就将其名称和值拼接到一个新的汇总列中,并输出汇总数据。