如图,图中数据已存入Datatable,改表的cloum很多有64列,现在想根据cloumName6对其他多列进行分类合计并存入新的DataTable中。新表也要是64列。PS:根据cloumName6对其他多列进行分类合计时,只对含数字的列进行合计。
C#Datatable分类汇总
如图,图中数据已存入Datatable,改表的cloum很多有64列,现在想根据cloumName6对其他多列进行分类合计并存入新的DataTable中。新表也要是64列。PS:根据cloumName6对其他多列进行分类合计时,只对含数字的列进行合计。
- 写回答
- 好问题 0 提建议
- 追加酬金
- 关注问题
- 邀请回答
-
4条回答 默认 最新
- 专家-皆知 2024-03-28 21:16关注
引自免费微信小程序:皆我百晓生
要解决这个问题,我们可以通过以下步骤操作:
- 首先,我们需要将整个C# DataTable 中的数据读取到本地(假设是通过
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的相应列中,作为包含数字值的行数据。
注意,这只是一个基础的示例,实际应用可能会涉及到更复杂的数据处理逻辑,例如填充缺失值、进行筛选和排序等。具体的操作方式取决于你的业务需求和个人偏好。
为了对所有列进行分类汇总,你需要实现以下功能:
- 根据每个cloumName确定列的名字。
- 对每一个不为空的cloumName及其对应数值,计算其在另一个汇总列中的总和。
- 将汇总后的列添加到原始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中的所有列,并对于每个不为空的列,都会查找是否存在与汇总列相关联的列,如果存在,就将其名称和值拼接到一个新的汇总列中,并输出汇总数据。
解决 无用评论 打赏 举报 编辑记录 - 首先,我们需要将整个C# DataTable 中的数据读取到本地(假设是通过
悬赏问题
- ¥15 35114 SVAC视频验签的问题
- ¥15 impedancepy
- ¥15 在虚拟机环境下完成以下,要求截图!
- ¥15 求往届大挑得奖作品(ppt…)
- ¥15 如何在vue.config.js中读取到public文件夹下window.APP_CONFIG.API_BASE_URL的值
- ¥50 浦育平台scratch图形化编程
- ¥20 求这个的原理图 只要原理图
- ¥15 vue2项目中,如何配置环境,可以在打完包之后修改请求的服务器地址
- ¥20 微信的店铺小程序如何修改背景图
- ¥15 UE5.1局部变量对蓝图不可见