将数据导入到已存在的excel文件中

简介:

 

 
  1. CRUD数据访问类基类  
  2.  
  3. using System;  
  4. using System.Collections;  
  5. using System.Collections.Generic;  
  6. using System.Text;  
  7. using System.Data;  
  8. using System.Data.OleDb;  
  9.  
  10.  
  11. namespace myexcel{  
  12.     public class DbExcel  
  13.     {  
  14.           
  15.         /// <summary> 
  16.         /// 获取读取连接字符串  
  17.         /// </summary> 
  18.         /// <param name="phyfilepath"></param> 
  19.         /// <returns></returns> 
  20.         private static string GetOptionConnstr(string phyfilepath)  
  21.         {  
  22.             string endstr = phyfilepath.Substring(phyfilepath.IndexOf('.') + 1);  
  23.             if (endstr.ToLower() == "xlsx")  
  24.             {  
  25.                 return "Provider=Microsoft.ACE.OleDb.12.0;Extended Properties=\"Excel 12.0;HDR=no;\";Data Source=" + phyfilepath;  
  26.             }  
  27.  
  28.             return "Provider=Microsoft.Jet.OLEDB.4.0;Extended Properties=\"Excel 8.0;HDR=no;\";Data Source=" + phyfilepath;  
  29.         }  
  30.  
  31.  
  32.         /// <summary> 
  33.         /// 获取操作连接字符串  
  34.         /// </summary> 
  35.         /// <param name="phyfilepath"></param> 
  36.         /// <returns></returns> 
  37.         private static string GetReadConnStr(string phyfilepath)  
  38.         {  
  39.             string endstr = phyfilepath.Substring(phyfilepath.IndexOf('.') + 1);  
  40.             if (endstr.ToLower() == "xlsx")  
  41.             {  
  42.                 return "Provider=Microsoft.ACE.OleDb.12.0;Extended Properties=\"Excel 12.0;HDR=yes;IMEX=1\";Data Source="+phyfilepath;   
  43.             }  
  44.      
  45.                 return "Provider=Microsoft.Jet." +  
  46.                 "OLEDB.4.0;Extended Properties=\"Excel 8.0;HDR=Yes;IMEX=1\";Data Source="+phyfilepath;                  
  47.         }  
  48.  
  49.  
  50.         public static DataTable GetExcelDataTable(string phyfilepath)  
  51.         {  
  52.             OleDbConnection conn = null;  
  53.             string sheetName = "Sheet1";  
  54.             DataTable dataTable = null;  
  55.               
  56.             try  
  57.             {  
  58.                 using (conn = new OleDbConnection(GetReadConnStr(phyfilepath)))  
  59.                 {  
  60.                     conn.Open();  
  61.                     DataTable sheetNames = conn.GetOleDbSchemaTable(OleDbSchemaGuid.Tables, null);  
  62.  
  63.                         foreach (DataRow dr in sheetNames.Rows)  
  64.                         {  
  65.                             sheetName = dr[2].ToString().Trim();  
  66.                             break;  
  67.                         }  
  68.                     OleDbDataAdapter oada = new OleDbDataAdapter("select * from [" + sheetName + "]", conn);  
  69.                     DataSet ds = new DataSet();  
  70.                     oada.Fill(ds, "InitData");  
  71.  
  72.                     dataTable = ds.Tables["InitData"];  
  73.                 }  
  74.             }  
  75.             catch (Exception ex)  
  76.             {  
  77.                 throw new BaseDBException(ex.Message);  
  78.             }  
  79.             finally  
  80.             {  
  81.                 conn.Close();  
  82.             }  
  83.  
  84.             return dataTable;  
  85.         }  
  86.  
  87.         public static DataTable GetExcelSheetTable(string phyfilepath)  
  88.         {  
  89.             OleDbConnection conn = null;  
  90.             string sheetName = "Sheet1$";  
  91.             DataTable dataTable = null;  
  92.  
  93.             try  
  94.             {  
  95.                 using (conn = new OleDbConnection(GetReadConnStr(phyfilepath)))  
  96.                 {  
  97.                     conn.Open();  
  98.                     OleDbDataAdapter oada = new OleDbDataAdapter("select * from [" + sheetName + "]", conn);  
  99.                     DataSet ds = new DataSet();  
  100.                     oada.Fill(ds, "InitData");  
  101.  
  102.                     dataTable = ds.Tables["InitData"];  
  103.                 }  
  104.             }  
  105.             catch (Exception ex)  
  106.             {  
  107.                 throw new BaseDBException(ex.Message);  
  108.                 //return null;  
  109.                 
  110.             }  
  111.             finally  
  112.             {  
  113.                 conn.Close();  
  114.             }  
  115.  
  116.             return dataTable;  
  117.         }  
  118.  
  119.         public static DataTable GetExcelSheetTable(string phyfilepath,string SheetName)  
  120.         {  
  121.             OleDbConnection conn = null;  
  122.             string sheetName = SheetName;  
  123.             DataTable dataTable = null;  
  124.  
  125.             try  
  126.             {  
  127.                 using (conn = new OleDbConnection(GetReadConnStr(phyfilepath)))  
  128.                 {  
  129.                     conn.Open();  
  130.                     DataTable sheetNames = conn.GetOleDbSchemaTable(OleDbSchemaGuid.Tables, null);  
  131.  
  132.  
  133.                     OleDbDataAdapter oada = new OleDbDataAdapter("select * from [" + sheetName + "]", conn);  
  134.                     DataSet ds = new DataSet();  
  135.                     oada.Fill(ds, "InitData");  
  136.  
  137.                     dataTable = ds.Tables["InitData"];  
  138.                 }  
  139.             }  
  140.             catch (Exception ex)  
  141.             {  
  142.                 throw new BaseDBException(ex.Message);  
  143.             }  
  144.             finally  
  145.             {  
  146.                 conn.Close();  
  147.             }  
  148.  
  149.             return dataTable;  
  150.         }  
  151.           
  152.         public static void ExcelColDataUpdate(string phyfilepath, string sheetName,string setvalue,string where)  
  153.         {  
  154.             OleDbConnection conn = null;  
  155.             try  
  156.             {  
  157.                 using (conn = new OleDbConnection(GetOptionConnstr(phyfilepath)))  
  158.                 {  
  159.                     conn.Open();  
  160.                     OleDbCommand cmd = new OleDbCommand();  
  161.                     cmd.CommandType = CommandType.Text;  
  162.  
  163.                     cmd.CommandText = "UPDATE ["+sheetName+"$] "+setvalue+" "+where;  
  164.                     cmd.Connection = conn;  
  165.                     cmd.ExecuteNonQuery();  
  166.  
  167.                 }  
  168.             }  
  169.             catch (Exception ex)  
  170.             {  
  171.                 throw new BaseDBException(ex.Message);  
  172.             }  
  173.             finally  
  174.             {  
  175.                 conn.Close();  
  176.             }  
  177.           
  178.           
  179.         }  
  180.  
  181.         public static void ExcelColDataInsert(string phyfilepath, string sheetName, string columnNames, string values)  
  182.         {  
  183.             OleDbConnection conn = null;  
  184.             try  
  185.             {  
  186.                 using (conn = new OleDbConnection(GetOptionConnstr(phyfilepath)))  
  187.                 {  
  188.                     conn.Open();  
  189.                     OleDbCommand cmd = new OleDbCommand();  
  190.                     cmd.CommandType = CommandType.Text;  
  191.  
  192.                     cmd.CommandText = "insert into [" + sheetName + "$] (" + columnNames + ") values(" + values + ")";  
  193.                     cmd.Connection = conn;  
  194.                     cmd.ExecuteNonQuery();  
  195.                       
  196.                 }  
  197.             }  
  198.             catch (Exception ex)  
  199.             {  
  200.                 throw new BaseDBException(ex.Message);  
  201.             }  
  202.             finally  
  203.             {  
  204.                 conn.Close();  
  205.             }  
  206.           
  207.         }  
  208.  
  209.         public static void ExcelVoucherDataInsert(string filePath, string sheetName, DataTable dt)  
  210.         {  
  211.             StringBuilder sb = new StringBuilder();  
  212.             if (dt == null || dt.Rows.Count == 0) return;  
  213.             try  
  214.             {  
  215.                 using (OleDbConnection conn = new OleDbConnection(GetOptionConnstr(filePath)))  
  216.                 {  
  217.                     conn.Open();  
  218.                     foreach (DataRow row in dt.Rows)  
  219.                     {  
  220.                         OleDbCommand cmd = new OleDbCommand();  
  221.                         cmd.CommandType = CommandType.Text;  
  222.                         cmd.CommandText = "insert into [" + sheetName + "$] values('" + row["FName"].ToString() + "','" + row["FNo"].ToString() + "','" + row["FIName"].ToString() + "')";  
  223.                         cmd.Connection = conn;  
  224.                         cmd.ExecuteNonQuery();  
  225.                     }  
  226.                 }  
  227.             }  
  228.             catch (Exception ex)  
  229.             {  
  230.                 throw new BaseDBException(ex.Message);  
  231.             }  
  232.         }  
  233.  
  234.         public static void  ExcelVoucherDataInsert(string filePath, string sheetName, string itemClass , string number , string name)  
  235.         {  
  236.             try  
  237.             {  
  238.                 using (OleDbConnection conn = new OleDbConnection(GetOptionConnstr(filePath)))  
  239.                 {  
  240.                     conn.Open();  
  241.                     OleDbCommand cmd = new OleDbCommand();  
  242.                     cmd.CommandType = CommandType.Text;  
  243.  
  244.                     cmd.CommandText = "insert into [" + sheetName + "$] values('" + itemClass + "','" + number + "','" + name + "')";  
  245.                     cmd.Connection = conn;  
  246.                     cmd.ExecuteNonQuery();  
  247.                 }  
  248.             }  
  249.             catch(Exception ex)  
  250.             {  
  251.                 throw new BaseDBException(ex.Message);  
  252.             }  
  253.         }  
  254.           
  255.  
  256.         public static void ExcelColDataInsert(string phyfilepath, string sheetName, string columnName, string[] values)  
  257.         {  
  258.             OleDbConnection conn = null;  
  259.             try  
  260.             {  
  261.                 using (conn = new OleDbConnection(GetOptionConnstr(phyfilepath)))  
  262.                 {  
  263.                     conn.Open();  
  264.                     OleDbCommand cmd = new OleDbCommand();  
  265.                     cmd.CommandType = CommandType.Text;  
  266.  
  267.                     foreach (string str in values)  
  268.                     {  
  269.                         cmd.CommandText = "insert into [" + sheetName + "$] (" + columnName + ") values(' " + str + "')";  
  270.                         cmd.Connection = conn;  
  271.                         cmd.ExecuteNonQuery();  
  272.                     }  
  273.                 }  
  274.             }  
  275.             catch (Exception ex)  
  276.             {  
  277.                 throw new BaseDBException(ex.Message);  
  278.             }  
  279.             finally  
  280.             {  
  281.                 conn.Close();  
  282.             }  
  283.         }  
  284.       
  285.     }  
  286.  

编写连接与操作excel文件的通用函数
 

 
  1. 代码  
  2.  
  3. protected void DoOleSql(string sql, string database)  
  4.  
  5.   {     
  6.  
  7.   OleDbConnection conn = new OleDbConnection();  
  8.  
  9.   conn.ConnectionString = "Provider=Microsoft.Jet.OLEDB.4.0;Data Source=" + Server.MapPath("\\") + database + "; Extended Properties='Excel 8.0;HDR=no;IMEX=0'";  
  10.  
  11.   try  
  12.  
  13.   {//打开连接  
  14.  
  15.   conn.Open();  
  16.  
  17.   }  
  18.  
  19.   catch (Exception e)  
  20.  
  21.   {  
  22.  
  23.   Response.Write(e.ToString());  
  24.  
  25.   }  
  26.  
  27.   OleDbCommand olecommand = new OleDbCommand(sql, conn);     
  28.  
  29.   try  
  30.  
  31.   {//执行语句  
  32.  
  33.   olecommand.ExecuteNonQuery();  
  34.  
  35.   }  
  36.  
  37.   catch (Exception eee)  
  38.  
  39.   {  
  40.  
  41.   Response.Write(eee.ToString());  
  42.  
  43.   conn.Close();  
  44.  
  45.   }  
  46.  
  47.   finally  
  48.  
  49.   {  
  50.  
  51.   conn.Close();//关闭数据库  
  52.  
  53.   }  
  54.  
  55.   conn.Close();  
  56.  

注:1)使用 Excel 工作簿时,默认情况下,区域中的第一行是标题行(或字段名称)。如果第一个区域不包含标题,您可以在连接字符串的扩展属性中指定 HDR=NO。如果您在连接字符串中指定 HDR=NO,Jet OLE DB 提供程序将自动为您命名字段(F1 表示第一个字段,F2 表示第二个字段,依此类推);2)IMEX=1将所有读入数据看作字符,其他值(0、2)请查阅相关帮助文档;3)如果出现“找不到可安装的isam”错误,一般是连接字符串错误

3、从excel文件读取数据

string sql = "select * from [sheet1$]";

DoOleSql(sql,"test.xls");

4、更新excel文件中的数据

string sql = "update [sheet1$] set FieldName1='333' where FieldName2='b3'";

DoOleSql(sql,"test.xls");

5、向excel文件插入数据

string sql = "insert into [sheet1$](FieldName1,FieldName2,…) values('a',’b’,…)";

DoOleSql(sql,"test.xls");

6、删除excel文件中的数据:不提倡使用这种方法

7、对于非标准结构的excel表格,可以指定excel中sheet的范围

1)读取数据:string sql = "select * from [sheet1$A3:F20]";

2)更新数据:string sql = "update [sheet1$A9:F15] set FieldName='333' where AnotherFieldName='b3'";

3)插入数据:string sql = "insert into [sheet1$A9:F15](FieldName1,FieldName2,…) values('a',’b’,…)";

4)删除数据:不提倡

注:1)代码根据需要可以自行修改;2)如果出现“操作必须使用一个可更新的查询”错误,可能sql语句中对excel文件中的“字段”引用有错误,或对 excel文件不具有“修改”权限;3)如果出现“不能扩充选定范围”错误,可能是对excel文件引用的“范围”有错误。



本文转自linzheng 51CTO博客,原文链接:http://blog.51cto.com/linzheng/1080854

相关文章
|
8天前
|
数据采集 数据可视化 数据挖掘
利用Python自动化处理Excel数据:从基础到进阶####
本文旨在为读者提供一个全面的指南,通过Python编程语言实现Excel数据的自动化处理。无论你是初学者还是有经验的开发者,本文都将帮助你掌握Pandas和openpyxl这两个强大的库,从而提升数据处理的效率和准确性。我们将从环境设置开始,逐步深入到数据读取、清洗、分析和可视化等各个环节,最终实现一个实际的自动化项目案例。 ####
|
2月前
|
数据处理 Python
Python实用记录(十):获取excel数据并通过列表的形式保存为txt文档、xlsx文档、csv文档
这篇文章介绍了如何使用Python读取Excel文件中的数据,处理后将其保存为txt、xlsx和csv格式的文件。
62 3
Python实用记录(十):获取excel数据并通过列表的形式保存为txt文档、xlsx文档、csv文档
|
1月前
|
存储 Java API
Java实现导出多个excel表打包到zip文件中,供客户端另存为窗口下载
Java实现导出多个excel表打包到zip文件中,供客户端另存为窗口下载
41 4
|
2月前
|
JavaScript 前端开发 数据处理
Vue导出el-table表格为Excel文件的两种方式
Vue导出el-table表格为Excel文件的两种方式
74 6
|
2月前
|
easyexcel Java UED
SpringBoot中大量数据导出方案:使用EasyExcel并行导出多个excel文件并压缩zip后下载
在SpringBoot环境中,为了优化大量数据的Excel导出体验,可采用异步方式处理。具体做法是将数据拆分后利用`CompletableFuture`与`ThreadPoolTaskExecutor`并行导出,并使用EasyExcel生成多个Excel文件,最终将其压缩成ZIP文件供下载。此方案提升了导出效率,改善了用户体验。代码示例展示了如何实现这一过程,包括多线程处理、模板导出及资源清理等关键步骤。
|
1月前
|
Java easyexcel 大数据
震撼!通过双重异步,Excel 10万行数据导入从191秒优化到2秒!
通过合理设计线程池和利用异步编程模型,本文展示了如何将 Excel 10万行数据的导入时间从191秒优化到2秒。文章详细介绍了使用 Spring Boot 的 `@Async` 注解、自定义线程池和 EasyExcel 进行大数据量的 Excel 解析和异步写入数据库的方法。通过分而治之的策略,减少了系统的响应时间,提高了并发处理能力。同时,还分析了如何根据 CPU 和 IO 密集型任务的特性,合理设置线程池的参数,以充分发挥硬件资源的性能。
|
2月前
|
前端开发 JavaScript API
前端基于XLSX实现数据导出到Excel表格,以及提示“文件已经被损坏,无法打开”的解决方法
前端基于XLSX实现数据导出到Excel表格,以及提示“文件已经被损坏,无法打开”的解决方法
157 0
|
2月前
|
数据采集 存储 JavaScript
自动化数据处理:使用Selenium与Excel打造的数据爬取管道
本文介绍了一种使用Selenium和Excel结合代理IP技术从WIPO品牌数据库(branddb.wipo.int)自动化爬取专利信息的方法。通过Selenium模拟用户操作,处理JavaScript动态加载页面,利用代理IP避免IP封禁,确保数据爬取稳定性和隐私性。爬取的数据将存储在Excel中,便于后续分析。此外,文章还详细介绍了Selenium的基本设置、代理IP配置及使用技巧,并探讨了未来可能采用的更多防反爬策略,以提升爬虫效率和稳定性。
111 4
|
4月前
|
关系型数据库 MySQL Shell
不通过navicat工具怎么把查询数据导出到excel表中
不通过navicat工具怎么把查询数据导出到excel表中
47 0
|
3月前
|
数据采集 存储 数据挖掘
使用Python读取Excel数据
本文介绍了如何使用Python的`pandas`库读取和操作Excel文件。首先,需要安装`pandas`和`openpyxl`库。接着,通过`read_excel`函数读取Excel数据,并展示了读取特定工作表、查看数据以及计算平均值等操作。此外,还介绍了选择特定列、筛选数据和数据清洗等常用操作。`pandas`是一个强大且易用的工具,适用于日常数据处理工作。