java合并多个表格为一个_多个DataTable的合并成一个新表

本文介绍了如何使用Java合并两个DataTable,无论是结构相同还是不同的情况。当DataTable结构相同时,可以通过Rows.Add方法或ImportRow方法合并。结构不同时,需要先添加一个表的所有数据,然后在每行后面添加另一个表的数据,同时添加缺失的列结构。
摘要由CSDN通过智能技术生成

有时我们知道了两个DataTable1和DataTable2,我们希望将它们合并为一个新的DataTable(下面的例子中命名为了newDataTable),这就分为两种情况:DataTable1和DataTable2结构相同、DataTable1和DataTable2结构不同,下面分别介绍怎么进行合并。

一、DataTable1和DataTable2结构相同的情况,结构相同我们只需要把两者的数据罗列到一块就可以了

首先初始化相同结构DataTable(测试用的)

void InitDataTable1(DataTable dt)

{

dt.Columns.Add("student_no");

dt.Columns.Add("student_name");

dt.Rows.Add("001", "June");

dt.Rows.Add("002", "zhang");

dt.Rows.Add("003", "jun");

}

void InitDataTable2(DataTable dt)

{

dt.Columns.Add("student_no");

dt.Columns.Add("student_name");

dt.Rows.Add("111", "ABC");

dt.Rows.Add("222", "XYZ");

dt.Rows.Add("333", "OPQ");

}

合并方法1:用Rows.Add方法

DataTable newDataTable = DataTable1.Clone();

object[] obj = new object[newDataTable.Columns.Count];

//添加DataTable1的数据 for (int i = 0; i < DataTable1.Rows.Count; i++)

{

DataTable1.Rows[i].ItemArray.CopyTo(obj, 0);

newDataTable.Rows.Add(obj);

}

//添加DataTable2的数据 for (int i = 0; i < DataTable2.Rows.Count; i++)

{

DataTable2.Rows[i].ItemArray.CopyTo(obj, 0);

newDataTable.Rows.Add(obj);

}

合并方法2:用DataTable.ImportRow方法

//拷贝DataTable1的结构和数据 DataTable newDataTable = DataTable1.Copy();

//添加DataTable2的数据 foreach (DataRow dr in DataTable2.Rows)

{

newDataTable.ImportRow(dr);

}

其实添加DataTable1的结构和数据有两种方法

//克隆DataTable1的结构 DataTable newDataTable = DataTable1.Clone();

object[] obj = new object[newDataTable.Columns.Count];

//添加DataTable1的数据 for (int i = 0; i < DataTable1.Rows.Count; i++)

{

DataTable1.Rows[i].ItemArray.CopyTo(obj, 0);

newDataTable.Rows.Add(obj);

}

或者直接用自带的Copy方法  DataTable newDataTable = DataTable1.Copy();

二、DataTable1和DataTable2结构不同相同的情况,我们可以先向新表中添加DataTable1的数据,然后再向每行的后面添加添加DataTable2的数据,注意两者的行数不一定相同。

首先初始化相同结构DataTable(测试用的)

void InitDataTable1(DataTable dt)

{

dt.Columns.Add("student_no1");

dt.Columns.Add("student_name1");

dt.Rows.Add("001", "June");

dt.Rows.Add("002", "zhang");

//dt.Rows.Add("003", "jun"); }

void InitDataTable2(DataTable dt)

{

dt.Columns.Add("student_no2");

dt.Columns.Add("student_name2");

dt.Rows.Add("111", "ABC");

dt.Rows.Add("222", "XYZ");

dt.Rows.Add("222", "ASD");

}

方法(1)先添加第一个表,再添加第二个表

/// ///将两个列不同(结构不同)的DataTable合并成一个新的DataTable/// /// 表1/// 表2/// 合并后新的表名/// 合并后的新表 private DataTable UniteDataTable(DataTable DataTable1, DataTable DataTable2, string DTName)

{

//克隆DataTable1的结构 DataTable newDataTable = DataTable1.Clone();

for (int i = 0; i < DataTable2.Columns.Count; i++)

{

//再向新表中加入DataTable2的列结构 newDataTable.Columns.Add(DataTable2.Columns[i].ColumnName);

}

object[] obj = new object[newDataTable.Columns.Count];

//添加DataTable1的数据 for (int i = 0; i < DataTable1.Rows.Count; i++)

{

DataTable1.Rows[i].ItemArray.CopyTo(obj, 0);

newDataTable.Rows.Add(obj);

}

if (DataTable1.Rows.Count >= DataTable2.Rows.Count)

{

for (int i = 0; i < DataTable2.Rows.Count; i++)

{

for (int j = 0; j < DataTable2.Columns.Count; j++)

{

newDataTable.Rows[i][j + DataTable1.Columns.Count] = DataTable2.Rows[i][j].ToString();

}

}

}

else

{

DataRow dr3;

//向新表中添加多出的几行 for (int i = 0; i < DataTable2.Rows.Count - DataTable1.Rows.Count; i++)

{

dr3 = newDataTable.NewRow();

newDataTable.Rows.Add(dr3);

}

for (int i = 0; i < DataTable2.Rows.Count; i++)

{

for (int j = 0; j < DataTable2.Columns.Count; j++)

{

newDataTable.Rows[i][j + DataTable1.Columns.Count] = DataTable2.Rows[i][j].ToString();

}

}

}

newDataTable.TableName = DTName; //设置DT的名字 return newDataTable;

方法(2)先添加行数多的表。其实我们也可以先判断哪个表的行数多,就先添加哪个表,然后再添加行少的表就可以了。

/// ///将两个列不同(结构不同)的DataTable合并成一个新的DataTable/// /// 表1/// 表2/// 合并后新的表名/// 合并后的新表 private DataTable UniteDataTable2(DataTable DataTable1, DataTable DataTable2, string DTName)

{

DataTable newDataTable = new DataTable();

if (DataTable1.Rows.Count > DataTable2.Rows.Count)

{

newDataTable = FillData(DataTable1, DataTable2);

}

else

{

newDataTable = FillData(DataTable2, DataTable1);

}

newDataTable.TableName = DTName; //设置DT的名字 return newDataTable;

}

private DataTable FillData(DataTable dt1, DataTable dt2)

{

//克隆DataTable1的结构 DataTable newDataTable = dt1.Clone();

for (int i = 0; i < dt2.Columns.Count; i++)

{

//再向新表中加入DataTable2的列结构 newDataTable.Columns.Add(dt2.Columns[i].ColumnName);

}

object[] obj = new object[newDataTable.Columns.Count];

//添加DataTable1的数据 for (int i = 0; i < dt1.Rows.Count; i++)

{

dt1.Rows[i].ItemArray.CopyTo(obj, 0);

newDataTable.Rows.Add(obj);

}

for (int i = 0; i < dt2.Rows.Count; i++)

{

for (int j = 0; j < dt2.Columns.Count; j++)

{

newDataTable.Rows[i][j + dt1.Columns.Count] = dt2.Rows[i][j].ToString();

}

}

return newDataTable;

}

可以使用MATLAB中的`readtable`函数读取所有的Excel表格,然后使用`vertcat`函数将它们合并一个表格,最后使用`writetable`函数将大表格写入到一个新的Excel文件中,并按照需要将它分割多个分表。 以下是一个简单的示例代码,假设有三个Excel表格,每个表格中有两数据,分别为“名称”和“数值”,需要将它们合并一个表格,并将大表格分为两个分表: ```matlab % 读取第一个Excel表格 dataTable = readtable('table1.xlsx'); % 读取第二个Excel表格 dataTable = vertcat(dataTable, readtable('table2.xlsx')); % 读取第三个Excel表格 dataTable = vertcat(dataTable, readtable('table3.xlsx')); % 将大表格按照“名称”进行排序 dataTable = sortrows(dataTable, '名称'); % 计算每个分表的行数 numRowsPerTable = ceil(height(dataTable)/2); % 将大表格分割两个分表 dataTable1 = dataTable(1:numRowsPerTable,:); dataTable2 = dataTable(numRowsPerTable+1:end,:); % 将分表写入到新的Excel文件中 writetable(dataTable1, 'output1.xlsx'); writetable(dataTable2, 'output2.xlsx'); ``` 在这个示例代码中,我们首先使用`readtable`函数读取了三个Excel表格,并使用`vertcat`函数将它们合并一个表格。接着,我们使用`sortrows`函数按照“名称”对大表格进行了排序,然后计算了每个分表的行数。最后,我们使用`writetable`函数将大表格分割两个分表,并将它们分别写入到了新的Excel文件中。
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值