问题描述
因为各种原因接到一个项目,获得大量数据.其中有两个excel表,A和BA数据多,B数据少,除地址列外无重复列,所以关联只有地址列....地址列大家都懂,很接近但是差别还是有的.问:怎么把A和B整合,可以把B填入A也可以整合成新的,意思都一样,
解决方案
解决方案二:
1:创建两个临时表A,B,C2:excel分别插入数据表3:sql匹配插入新表C4:导出C表
解决方案三:
把多个Excel文件汇总到一个Excel文件//选择多个文件privatevoidbtn_SelectMultiExcel_Click(objectsender,EventArgse){txt_MultiExcel.Text="";//清空文本框OpenFileDialogopenMultiExcel=newOpenFileDialog();//实例化打开对话框对象openMultiExcel.Filter="Excel文件|*.xls";//设置打开文件筛选器openMultiExcel.Multiselect=true;//设置打开对话框中可以多选if(openMultiExcel.ShowDialog()==DialogResult.OK)//判断是否选择了文件{for(inti=0;i<openMultiExcel.FileNames.Length;i++)//遍历选择的多个文件txt_MultiExcel.Text+=openMultiExcel.FileNames[i]+",";//显示选择的多个Excel文件}}//选择文件事件privatevoidbtn_SelectExcel_Click(objectsender,EventArgse){OpenFileDialogopenExcel=newOpenFileDialog();//实例化打开对话框对象openExcel.Filter="Excel文件|*.xls";//设置打开文件筛选器openExcel.Multiselect=false;//设置打开对话框中不能多选if(openExcel.ShowDialog()==DialogResult.OK)//判断是否选择了文件{txt_Excel.Text=openExcel.FileName;//显示选择的Excel文件}}//汇总到数据表事件privatevoidbtn_Gather_Click(objectsender,EventArgse){objectmissing=System.Reflection.Missing.Value;//定义object缺省值string[]P_str_Names=txt_MultiExcel.Text.Split(',');//存储所有选择的Excel文件名stringP_str_Name="";//存储遍历到的Excel文件名List<string>P_list_SheetNames=newList<string>();//实例化泛型集合对象,用来存储工作表名称Microsoft.Office.Interop.Excel.Applicationexcel=newMicrosoft.Office.Interop.Excel.Application();//实例化Excel对象//打开指定的Excel文件Microsoft.Office.Interop.Excel.Workbookworkbook=excel.Application.Workbooks.Open(txt_Excel.Text,missing,missing,missing,missing,missing,missing,missing,missing,missing,missing,missing,missing,missing,missing);Microsoft.Office.Interop.Excel.WorksheetnewWorksheet=(Microsoft.Office.Interop.Excel.Worksheet)workbook.Worksheets.Add(missing,missing,missing,missing);//创建新工作表for(inti=0;i<P_str_Names.Length-1;i++)//遍历所有选择的Excel文件名{P_str_Name=P_str_Names[i];//记录遍历到的Excel文件名//指定要复制的工作簿Microsoft.Office.Interop.Excel.WorkbookTempworkbook=excel.Application.Workbooks.Open(P_str_Name,missing,missing,missing,missing,missing,missing,missing,missing,missing,missing,missing,missing,missing,missing);P_list_SheetNames=GetSheetName(P_str_Name);//获取Excel文件中的所有工作表名for(intj=0;j<P_list_SheetNames.Count;j++)//遍历所有工作表{//指定要复制的工作表Microsoft.Office.Interop.Excel.WorksheetTempWorksheet=(Microsoft.Office.Interop.Excel.Worksheet)Tempworkbook.Sheets[P_list_SheetNames[j]];//创建新工作表TempWorksheet.Copy(missing,newWorksheet);//将工作表内容复制到目标工作表中}Tempworkbook.Close(false,missing,missing);//关闭临时工作簿}//CodeGo.net/workbook.Save();//保存目标工作簿workbook.Close(false,missing,missing);//关闭目标工作簿MessageBox.Show("已经将所有选择的Excel工作表汇总到了一个Excel工作表中!","提示",MessageBoxButtons.OK,MessageBoxIcon.Information);CloseProcess("EXCEL");//关闭所有Excel进程}//打开选择的Excel文件privatevoidbtn_Browse_Click(objectsender,EventArgse){System.Diagnostics.Process.Start(txt_Excel.Text);//打开选择的Excel文件}//获取所有工作表名称privateList<string>GetSheetName(stringP_str_Excel){List<string>P_list_SheetName=newList<string>();//实例化泛型集合对象//连接Excel数据库OleDbConnectionolecon=newOleDbConnection("Provider=Microsoft.Jet.OLEDB.4.0;DataSource="+P_str_Excel+";ExtendedProperties=Excel8.0");olecon.Open();//打开数据库连接System.Data.DataTableDTable=olecon.GetSchema("Tables");//实例化表对象DataTableReaderDTReader=newDataTableReader(DTable);//实例化表读取对象while(DTReader.Read())//循环读取{stringP_str_Name=DTReader["Table_Name"].ToString().Replace('$','').Trim();//记录工作表名称if(!P_list_SheetName.Contains(P_str_Name))//判断泛型集合中是否已经存在该工作表名称P_list_SheetName.Add(P_str_Name);//将工作表名添加到泛型集合中}DTable=null;//清空表对象DTReader=null;//清空表读取对象olecon.Close();//关闭数据库连接returnP_list_SheetName;//返回得到的泛型集合}//字符关系恕未能关闭进程
解决方案四:
1.你可以调用百度api判断地址的经纬度,以此来作为判断“是否一致”的一种HashCode。2.比较是否重复时,应该是用Dictionaty<LatLngString,DataRow>来查找,而不是顺序扫描。这显然可以提高几万倍速度。
解决方案五:
像这种操纵excel表的,用C#反倒更麻烦了,建议直接用excel的VBS脚本
解决方案六:
....主要是需要比对地址...整合成一个不是难题...主要是这个地址比对....地址比对....地址比对....
解决方案七:
地址比对是个麻烦的事,主要因为人工录入时的有误差。。。我以前用过的方法是,重复出现的地址先导出一个表,对只出现过一次的地址人工比对。。。