想请教一个Excel和Sql的问题

jdps100 2011-09-20 08:07:47
excel表里有结构
生产令号 数量 供应商

sql表有结构
生产令号 时间 经办认

现在需求是实现功能,读取Excel文件,将excel表和sql表合并并输出新的excel表,结构应该是
生产令号 数量 供应商 时间 经办人

我知道可以先把excel表的数据导入到sql里,再联接查询,再输出为新的Excel表

因为是在WINFORM环境下,别人使用的功能,请教的是能够以一个功能按钮就完成,谢谢!!!
...全文
55 3 打赏 收藏 转发到动态 举报
AI 作业
写回复
用AI写文章
3 条回复
切换为时间正序
请发表友善的回复…
发表回复
xiongxyt2 2011-09-20
  • 打赏
  • 举报
回复
Excel到DataTable

public DataTable TransferDs(string excelFile, string sheetName, string connectionString, string sqlExl)
{
string strConn = "Provider=Microsoft.Jet.OLEDB.4.0;" + "Data Source=" + excelFile + ";" + "Extended Properties=Excel 8.0;";
OleDbConnection conn = new OleDbConnection(strConn);
DataSet ds = new DataSet();
try
{
//获取全部数据

conn.Open();
string strExcel = "";
OleDbDataAdapter myCommand = null;
strExcel = string.Format(sqlExl, sheetName);
myCommand = new OleDbDataAdapter(strExcel, strConn);
myCommand.Fill(ds, sheetName);
}
catch (Exception e)
{
throw e;
}
finally
{
conn.Close();
}
return ds.Tables[0];
}



合并两个DataTable,你这里需要稍作修改(不过可以先考虑用DataTable的Merge方法来合并,较为简单一些)

//两个结构不同的DT合并
/// <summary>
/// 将两个列不同的DataTable合并成一个新的DataTable
/// </summary>
/// <param name="dt1">表1</param>
/// <param name="dt2">表2</param>
/// <param name="DTName">合并后新的表名</param>
/// <returns></returns>
private DataTable UniteDataTable( DataTable dt1 ,DataTable dt2 ,string DTName)
{
DataTable dt3 = dt1.Clone();
for( int i = 0 ;i < dt2.Columns.Count ;i ++ )
{
dt3.Columns.Add( dt2.Columns[i].ColumnName ) ;
}
object[] obj = new object[dt3.Columns.Count];

for (int i = 0; i < dt1.Rows.Count; i++)
{
dt1.Rows[i].ItemArray.CopyTo(obj,0);
dt3.Rows.Add(obj);
}

if( dt1.Rows.Count >= dt2.Rows.Count )
{
for( int i = 0 ;i < dt2.Rows.Count ;i++ )
{
for( int j = 0 ;j < dt2.Columns.Count ;j ++ )
{
dt3.Rows[i][j+dt1.Columns.Count] = dt2.Rows[i][j].ToString() ;
}
}
}
else
{
DataRow dr3 ;
for( int i = 0 ;i < dt2.Rows.Count - dt1.Rows.Count ;i ++ )
{
dr3 = dt3.NewRow() ;
dt3.Rows.Add( dr3 ) ;
}
for( int i = 0 ;i < dt2.Rows.Count ;i++ )
{
for( int j = 0 ;j < dt2.Columns.Count ;j ++ )
{
dt3.Rows[i][j+dt1.Columns.Count] = dt2.Rows[i][j].ToString() ;
}
}
}
dt3.TableName = DTName ; //设置DT的名字
return dt3 ;
}




最后导入到Excel
sanjiawan 2011-09-20
  • 打赏
  • 举报
回复
具体代码实现挺多的
给个思路吧
1.肯定是要获取Excel里面的信息 保存到DataTable里面
同时从数据库中获取数据也放在DataTable里面
2.通过循环不断比配两个DataTable之间的“生产令号”相等的就在循环里面进行代码处理组合存储在新的DataTable里面
3.将存有重新组合记录的DataTable存入Excel里面

只要去网上找如何获取Excel里面的值
如何写入数据到Excel里面
如何操作DataTable 难点就这三个吧
网上挺多的 花点时间研究下吧
正好我这有个现成的导出Excel功能 不过是在WPF上实现的 你看winform可以不 思想都是一样的

private void btnExport_Click(object sender, RoutedEventArgs e)
{
List<Information> infoList = new List<Information>();
infoList = tbInfo.GetInformationList(); //获取数据源
System.Data.DataTable table;
table = new System.Data.DataTable();
table.Columns.Add("ID", typeof(int));
table.Columns.Add("NickName", typeof(string));
table.Columns.Add("QNumber", typeof(string));

DataRow row = table.NewRow();
row["ID"] = 1;
row["NickName"] = "人物1";
row["QNumber"] = "21243468";
table.Rows.Add(row);

row = table.NewRow();
row["ID"] = 2;
row["NickName"] = "人物2";
row["QNumber"] = "9058307";
table.Rows.Add(row);

Microsoft.Office.Interop.Excel.Application excelApp = new Microsoft.Office.Interop.Excel.Application();
Workbook excelWB = excelApp.Workbooks.Add(System.Type.Missing);//创建工作簿(WorkBook:即Excel文件主体本身)
Worksheet excelWS = (Worksheet)excelWB.Worksheets[1];//创建工作表(即Excel里的子表sheet) 1表示在子表sheet1里进行数据导出

//将数据导入到工作表的单元格
for (int i = 0; i < table.Rows.Count; i++)
{
for (int j = 0; j < table.Columns.Count; j++)
{
excelWS.Cells[i + 1, j + 1] = table.Rows[i][j].ToString(); //Excel单元格第一个从索引1开始
}
}

excelWB.SaveAs("D:\\abc.xlsx");
excelWB.Close();
excelApp.Quit();
}


jys5091216 2011-09-20
  • 打赏
  • 举报
回复
一个功能按钮实现?你就把两个功能的代码都写在同一个按钮下不就可以了吗?

111,093

社区成员

发帖
与我相关
我的任务
社区描述
.NET技术 C#
社区管理员
  • C#
  • AIGC Browser
  • by_封爱
加入社区
  • 近7日
  • 近30日
  • 至今
社区公告

让您成为最强悍的C#开发者

试试用AI创作助手写篇文章吧