找回密码
 立即注册

QQ登录

只需一步,快速开始

扫一扫,访问微社区

查看: 813|回复: 3

[每日一码] 利用ADO.NET操作Excel

[复制链接]

已领礼包: 1个

财富等级: 恭喜发财

发表于 2017-6-2 09:00:02 | 显示全部楼层 |阅读模式

马上注册,结交更多好友,享用更多功能,让你轻松玩转社区。

您需要 登录 才可以下载或查看,没有账号?立即注册

×
  1. [CommandMethod("mTest")]
  2.         public void m_Test()
  3.         {
  4.             Editor m_ed = Autodesk.AutoCAD.ApplicationServices.Application.DocumentManager.MdiActiveDocument.Editor;
  5.             string m_FilePath = @"d:\TestExcel.xls";

  6.             #region 利用ADO.net操作Excel数据
  7.             string m_ExcelConnectStr = "Provider = Microsoft.Jet.OLEDB.4.0 ; Data Source = '" +
  8.         m_FilePath + "';Extended Properties=Excel 8.0";
  9.             OleDbConnection m_ODBC = new OleDbConnection(m_ExcelConnectStr);//连接Excel(如果给定文件不存在,自动创建新文件)
  10.             string m_SheetName = "mkhSheet";

  11.             #region 创建一个Excel表,并写入数据
  12.             m_ODBC.Open();//打开数据库

  13.             OleDbCommand m_ODBCMD = new OleDbCommand();
  14.             m_ODBCMD.Connection = m_ODBC;
  15.             string m_CMDStr = "";
  16.             string[] m_TitleName = new string[] { "序号", "数据1", "数据2", "数据3", "数据4" };//表头(Excel表中第一行数据)
  17.             string[] m_ValueType = new string[] { "numeric", "numeric", "numeric", "numeric", "numeric" };
  18.             for (int i = 0; i < m_TitleName.GetLength(0); i++) m_CMDStr += m_TitleName【i】+ " " + m_ValueType【i】+ ",";
  19.             m_CMDStr = "create table " + m_SheetName + " (" + m_CMDStr.Remove(m_CMDStr.Length - 1) + ")";
  20.             m_ODBCMD.CommandText = m_CMDStr;//创建表
  21.             try { m_ODBCMD.ExecuteNonQuery(); }//判断表是否已经存在?
  22.             catch
  23.             {
  24.                 m_ODBCMD.CommandText = "drop table " + m_SheetName; m_ODBCMD.ExecuteNonQuery();//如存在,则先删除
  25.                 m_ODBCMD.CommandText = m_CMDStr; m_ODBCMD.ExecuteNonQuery();//重新创建表
  26.             }
  27.             //向表中写入数据(增加记录)
  28.             for (int i = 0; i < 6; i++)
  29.             {
  30.                 m_CMDStr = "insert into " + m_SheetName + " (" + m_TitleName[0] + "," + m_TitleName[1] + "," + m_TitleName[3] + ") values(";
  31.                 m_CMDStr += i.ToString() + "," + (i + 1).ToString() + "," + (i + 2).ToString() + ")";
  32.                 m_ODBCMD.CommandText = m_CMDStr;//指定SQL语句
  33.                 m_ODBCMD.ExecuteNonQuery();//执行SQL语句,无返回值
  34.             }
  35.             //修改表中数据(修改记录)
  36.             OleDbDataAdapter m_ODBDA = new OleDbDataAdapter("select * from [" + m_SheetName + "$]", m_ODBC);//读Excel文件的一个表
  37.             DataSet m_DS = new DataSet();
  38.             m_ODBDA.Fill(m_DS);//把表数据填入DataSet中
  39.             System.Data.DataTable m_DT = m_DS.Tables[0];//获取表格所对应的DataTable对象
  40.             for (int i = 1; i < 6; i++)
  41.             {
  42.                 m_CMDStr = "update " + m_SheetName + " set " + m_TitleName[2] + "=";
  43.                 m_CMDStr += ((Convert.ToDouble(m_DT.Rows[i - 1][1]) + Convert.ToDouble(m_DT.Rows[1])) * 3.0 / 2).ToString("0.00");
  44.                 m_CMDStr += "," + m_TitleName[4] + "=";
  45.                 m_CMDStr += ((Convert.ToDouble(m_DT.Rows[i - 1][3]) + Convert.ToDouble(m_DT.Rows[3])) * 3.0 / 2).ToString("0.00");
  46.                 m_CMDStr += " where " + m_TitleName[0] + "=" + i.ToString();
  47.                 m_ODBCMD.CommandText = m_CMDStr;//指定SQL语句
  48.                 m_ODBCMD.ExecuteNonQuery();//执行SQL语句,无返回值
  49.             }
  50.             m_DT.Dispose(); m_DT = null;
  51.             m_DS.Dispose(); m_DS = null;
  52.             m_ODBDA.Dispose(); m_ODBDA = null;
  53.             m_ODBCMD.Dispose(); m_ODBCMD = null;
  54.             m_ODBC.Close();//关闭数据库
  55.             #endregion

  56.             #region 从Excel表中读取数据
  57.             m_ODBDA = new OleDbDataAdapter("select * from [" + m_SheetName + "$]", m_ODBC);//读Excel文件的一个表
  58.             m_DS = new DataSet();
  59.             m_ODBDA.Fill(m_DS);//把数据填入DataSet中
  60.             m_DT = m_DS.Tables[0];//获取表格所对应的DataTable对象,这样才能进行相关的操作

  61.             string m_Str = "";
  62.             for (int i = 0; i < m_DT.Columns.Count; i++) m_Str += m_DT.Columns.Caption.PadLeft(8,'-');
  63.             m_ed.WriteMessage("{0}", m_Str);//显示表头(Excel工作表中第一行数据)

  64.             for (int i = 0; i < m_DT.Rows.Count; i++)
  65.             {
  66.                 m_Str = "";
  67.                 m_ed.WriteMessage("\n");
  68.                 for (int j = 0; j < m_DT.Columns.Count; j++)
  69.                     m_Str += m_DT.Rows[j].ToString().PadLeft(8,'-');
  70.                 m_ed.WriteMessage("{0}", m_Str);//显示每行数据
  71.             }
  72.             m_DT.Dispose(); m_DT = null;
  73.             m_DS.Dispose(); m_DS = null;
  74.             m_ODBDA.Dispose(); m_ODBDA = null;
  75.             #endregion

  76.             m_ODBC.Dispose(); m_ODBC = null;
  77.             #endregion
  78.         }


论坛插件加载方法
发帖求助前要善用【论坛搜索】功能,那里可能会有你要找的答案;
如果你在论坛求助问题,并且已经从坛友或者管理的回复中解决了问题,请把帖子标题加上【已解决】;
如何回报帮助你解决问题的坛友,一个好办法就是给对方加【D豆】,加分不会扣除自己的积分,做一个热心并受欢迎的人!

已领礼包: 774个

财富等级: 财运亨通

发表于 2017-6-2 09:32:08 | 显示全部楼层
我先留个脚印,以后慢慢学习!
论坛插件加载方法
发帖求助前要善用【论坛搜索】功能,那里可能会有你要找的答案;
如果你在论坛求助问题,并且已经从坛友或者管理的回复中解决了问题,请把帖子标题加上【已解决】;
如何回报帮助你解决问题的坛友,一个好办法就是给对方加【D豆】,加分不会扣除自己的积分,做一个热心并受欢迎的人!
回复 支持 反对

使用道具 举报

已领礼包: 70个

财富等级: 招财进宝

发表于 2017-6-2 09:40:18 | 显示全部楼层
每日一讲,赞一个!
论坛插件加载方法
发帖求助前要善用【论坛搜索】功能,那里可能会有你要找的答案;
如果你在论坛求助问题,并且已经从坛友或者管理的回复中解决了问题,请把帖子标题加上【已解决】;
如何回报帮助你解决问题的坛友,一个好办法就是给对方加【D豆】,加分不会扣除自己的积分,做一个热心并受欢迎的人!
回复 支持 反对

使用道具 举报

已领礼包: 53个

财富等级: 招财进宝

发表于 2017-7-8 08:39:38 | 显示全部楼层
好东西值得分享
论坛插件加载方法
发帖求助前要善用【论坛搜索】功能,那里可能会有你要找的答案;
如果你在论坛求助问题,并且已经从坛友或者管理的回复中解决了问题,请把帖子标题加上【已解决】;
如何回报帮助你解决问题的坛友,一个好办法就是给对方加【D豆】,加分不会扣除自己的积分,做一个热心并受欢迎的人!
回复 支持 反对

使用道具 举报

您需要登录后才可以回帖 登录 | 立即注册

本版积分规则

QQ|申请友链|Archiver|手机版|小黑屋|辽公网安备|晓东CAD家园 ( 辽ICP备15016793号 )

GMT+8, 2024-11-17 21:48 , Processed in 0.163458 second(s), 33 queries , Gzip On.

Powered by Discuz! X3.5

© 2001-2024 Discuz! Team.

快速回复 返回顶部 返回列表