文章出处:http://blog.csdn.net/kuangshazi515/article/details/6585118

如下图所示,编一个程序,鼠标单击窗体视图区(右边)时,获取一对坐标(X,Y),点击保存将点保存到excel表记录中。此外,还实现了删除、更新功能以及打开excel表功能。插入和更新比较简单,和操作一般的数据库一样,但是删除稍微有点复杂,不能用delete from [Sheet1$] where ID=x的方式删除,自己可以去试,主要是excel数据之间的关系不像关系数据库那么简单,oledb不提供这种方法。所以只能用专门操作excel表的(Microsoft.Office.Interop.Excel名字空间下,先添加引用)来实现删除某条记录的功能。

源代码:

using System;

using System.Collections.Generic;

using System.ComponentModel;

using System.Data;

using System.Drawing;

using System.Text;

using System.Windows.Forms;

using System.Data.OleDb;

using System.Reflection;

using Excel = Microsoft.Office.Interop.Excel;

namespace Leation

{

public partial class FrmMain : Form

{

//定义变量

private OleDbConnection connection = null;

private OleDbCommand cmd = null;

private OleDbDataAdapter dataAdapter = null;

private DataSet dataSet = null;

private string filePath = @"G:\points.xls";

private string connStr = "provider=microsoft.jet.oledb.4.0;data source=G:\\points.xls;extended properties='Excel 8.0;HDR=yes;IMEX=2'";

private string selectStr = "select * from [Sheet1$]";

private string cmdStr = null;

private string OID = null;    //对象ID

private string x = null;

private string y = null;

private Excel.Application excelApp = null;

private Excel.Workbook book = null;

private Excel.Worksheet sheet = null;

private Excel.Range range = null;

//构造函数

public FrmMain()

{

InitializeComponent();

}

//鼠标移动事件

private void splitContainer1_Panel2_MouseMove(object sender, MouseEventArgs e)

{

this.lblxy.Text = "x=" + e.X.ToString() + "  y=" + e.Y.ToString();

}

//鼠标按下事件

private void splitContainer1_Panel2_MouseDown(object sender, MouseEventArgs e)

{

if (e.Button == MouseButtons.Left)

{

this.tbX.Text = e.X.ToString();

this.tbY.Text = e.Y.ToString();

}

}

//刷新dataGridView1

private void RefreshTable()

{

connection = new OleDbConnection(connStr);

connection.Open();

dataAdapter = new OleDbDataAdapter(selectStr, connection);

dataSet = new DataSet();

dataAdapter.Fill(dataSet);

this.dataGridView1.DataSource = dataSet.Tables[0];

connection.Close();

}

//程序加载事件,初始化dataGridView1

private void FrmMain_Load(object sender, EventArgs e)

{

this.RefreshTable();

}

//获取一个可以用的OID

private string GetOID()

{

int rowNum = this.dataGridView1.Rows.Count - 1;

int maxOID = 0;

int temp = 0;

for (int i = 0; i < rowNum; i++)

{

temp = int.Parse(this.dataGridView1[0, i].Value.ToString());

if (maxOID < temp)

{

maxOID = temp;

}

}

return (maxOID+1).ToString();

}

//插入一条记录,即保存一个点信息

private void btnSavePnt_Click(object sender, EventArgs e)

{

OID = this.GetOID();

x = this.tbX.Text;

y = this.tbY.Text;

if (x == "" || y == "")

{

MessageBox.Show("x,y不能为空");

lblTip.Text = "保存失败";

return;

}

connection = new OleDbConnection(connStr);

connection.Open();

cmdStr = "insert into [Sheet1$](ID,X,Y) values(" + OID + "," + x + "," + y + ")";

cmd = new OleDbCommand(cmdStr, connection);

int row=cmd.ExecuteNonQuery();

if (row > 0)

{

lblTip.Text = "保存成功,插入行数:" + row.ToString();

}

else

{

lblTip.Text = "保存失败";

}

connection.Close();

this.RefreshTable();

}

//删除记录

private void btnDelSelRow_Click(object sender, EventArgs e)

{

int selRowIndex = this.dataGridView1.CurrentRow.Index + 2;   //excel表中的行索引与dataGridView不一样,这里注意

if (selRowIndex<1)

{

MessageBox.Show("没有选中行");

lblTip.Text = "删除失败";

return;

}

excelApp = new Microsoft.Office.Interop.Excel.Application();

excelApp.Visible = false;   //若为true,删除瞬间可以看见 office excel界面

//打开excel文件

book = excelApp.Workbooks.Open(filePath, Missing.Value,false, Missing.Value, Missing.Value, Missing.Value, true, Missing.Value, Missing.Value, Missing.Value, Missing.Value, Missing.Value, Missing.Value, Missing.Value, Missing.Value);

//获取sheet1

sheet = (Excel.Worksheet)book.Worksheets[1];

//获取编辑范围

range = (Excel.Range)sheet.Rows[selRowIndex, Missing.Value];

//删除整行

range.EntireRow.Delete(Excel.XlDeleteShiftDirection.xlShiftUp);

//保存编辑

book.Save();

//关闭book

book.Close(Missing.Value, Missing.Value, Missing.Value);

//退出excel application,可以将前面的excelApp.Visible = false改为excelApp.Visible = true看看;

excelApp.Workbooks.Close();

excelApp.Quit();

//刷新dataGridView1

this.RefreshTable();

//选中删除行的上一行

if ((selRowIndex - 3) > 0)

{

this.dataGridView1.Rows[selRowIndex - 3].Selected = true;

}

this.lblTip.Text="删除成功";

}

//更新记录

private void btnUpdate_Click(object sender, EventArgs e)

{

int selRowIndex= this.dataGridView1.CurrentRow.Index;

if (selRowIndex< 0)

{

MessageBox.Show("没有选中行!");

lblTip.Text = "更新失败";

return;

}

OID = this.dataGridView1[0, selRowIndex].Value.ToString();

x = this.tbX.Text;

y = this.tbY.Text;

if (x == "" || y == "")

{

MessageBox.Show("x,y不能为空");

lblTip.Text = "更新失败";

return;

}

connection = new OleDbConnection(connStr);

connection.Open();

cmdStr = "update [Sheet1$] set X="+x+",Y="+y+" where ID='"+OID+"'";

cmd = new OleDbCommand(cmdStr, connection);

int row = cmd.ExecuteNonQuery();

if (row >= 1)

{

lblTip.Text = "更新成功,更新行数:" + row.ToString();

}

else

{

lblTip.Text = "更新失败";

}

connection.Close();

this.RefreshTable();

//选中更新的行

this.dataGridView1.Rows[selRowIndex].Selected = true;

}

private void btnOpenFile_Click(object sender, EventArgs e)

{

OpenFileDialog ofd = new OpenFileDialog();

ofd.Filter = "excel文件(*.xls)|*.xls";

ofd.Title = "代开excel表";

if (ofd.ShowDialog() == DialogResult.OK)

{

this.filePath = ofd.FileName;

this.connStr = "provider=microsoft.jet.oledb.4.0;data source=" + filePath + ";extended properties='Excel 8.0;HDR=yes;IMEX=2'";

this.RefreshTable();

}

}

}

}

【转】教你用C#读写、删除、更新excel表格记录的更多相关文章

  1. GridView总结二:GridView自带编辑删除更新

    GridView自带编辑删除更新逻辑很简单:操作完,重新绑定.总结总结,防止忘记... 效果图: 前台代码: <%@ Page Language="C#" AutoEvent ...

  2. 简单的php Mysql类(查询 删除 更新)

    php Mysql类一般都包括了几乎我们常用的数据库操作方法,这里只提供了查询 删除 更新三种操作,算不是很全只是一个简单的数据库查询类了.      代码如下 复制代码 class mysql { ...

  3. Python_对excel表格读写-openpyxl、xlrd&xlwt

    openpyxl 和 xlrd&xlwt 都能对excel进行读写,但是它们读写的格式不同,openpyxl 只能读写 xlsx格式的excel,xlrd&xlwt 只能读写 xls格 ...

  4. ArcGis dbf读写——挂接Excel到属性表 C#

    ArcMap提供了挂接Excel表格信息到属性表的功能,但是当数据量较大到以万计甚至十万计的时候这个功能就歇菜了,当然,你可以考虑分段挂接.这个挂接功能只是做了一个表关联,属性记录每个字段的信息需要通 ...

  5. MySql_delete同时删除多表相关联记录

    sql delete同时删除多表相关联记录 sqlserver 支持级联更新和删除oracle 只支持级联删除 删除包含主键值的行的操作,该值由其它表的现有行中的外键列引用.在级联删除中,还删除其外键 ...

  6. Git 删除所有历史提交记录方法

    Git 删除所有历史提交记录方法 切换分支 git checkout --orphan latest_branch 添加所有文件 git add -A 提交更改 git commit -am &quo ...

  7. 实时更新Excel文档外部数据源的数据

    实时更新Excel文档外部数据源的数据 单元格区域.Excel 表.数据透视表或数据透视图均可以连接到外部数据源(数据源:用于连接数据库的一组存储的"源"信息.数据源包含数据库服务 ...

  8. AM335X的应用程序自启动流程以及U盘更新应用程序记录

    在AM335X的SD卡更新系统学习记录中最后更新完系统后,以后运行应用程序都会从EMMC中取出Linux系统运行.接着介绍Linux系统是怎么自己启动我们编写的应用程序的. 1.在AM335X的SD卡 ...

  9. 如何在不使用OleDbCommandBuilder情况下使用OleDbDataAdapter更新Access数据库记录

    我在博客园的博问和微软论坛都曾经请教了这个问题(问题链接),可能我的问题太简单,并没有获得太多解答. 到今天为止,我自己通过查找和摸索,基本把这个问题解决了,还是记录下来,供其他朋友参考. 第一次解决 ...

随机推荐

  1. Git missing in VS Code – No source control providers

    解决办法:管理->设置->搜索[git.enabled]和[git.path],分别设置下即可. 注意"git.enabled: true",只设置git.path是不 ...

  2. SQL Server 2000中查询表名,列名及字段类型

    经常碰到一些忘记表名称的情况,此时只记得个大概,此时可通过查询系统表Sysobjects找到所要的表名,如要查找包含用户的表名,可通过以下SQL语句实现, Select * From sysobjec ...

  3. python类、类继承

    yield: 简单地讲,yield 的作用就是把一个函数变成一个 generator,带有 yield 的函数不再是一个普通函数,Python 解释器会将其视为一个 generator,调用 fab( ...

  4. OA项目Ioc DI(二)

    依赖注入:属性和构造函数的注入 一个简单的Demo: IUserInfoDal接口: public interface IUserInfoDal { void Show(); string Name ...

  5. hdu 4664 划线(SG)

    N个平面,每个平面有ni个点 两个人玩游戏,划线,他们可以划任意一个平面的两个点,有以下要求:两个人划得线不能交叉,不要划已经划过的线,如果一个平面被划了一个空心的三角形,那么这个平面就不能继续划线了 ...

  6. Kafka(一)Kafka的简介与架构

    一.简介 1.1 概述 Kafka是最初由Linkedin公司开发,是一个分布式.分区的.多副本的.多订阅者,基于zookeeper协调的分布式日志系统(也可以当做MQ系统),常见可以用于web/ng ...

  7. React.js学习之环境搭建

    1 工欲善其事必先利其器:前端开发工具 1.1 WebStorm和Sublime Text Sublime Text:作为代码编辑器,Sublime Text的优点如下: 主流前端开发编辑器 体积较小 ...

  8. js获取单个查询串的值

    function getSearchString(key) { // 获取URL中?之后的字符 var searchArr= window.location.href.split('#')[0].sp ...

  9. UVA - 10815 - Andy's First Dictionary STL

    Andy, 8, has a dream - he wants to produce his very own dictionary. This is not an easy task for him ...

  10. Kotlin in Action 笔记

    Kotlin 参考 官网 reference kotlin实战 Try Kotlin Kotlin China Github 简介 Kotlin是一门把Java平台作为目标的新的编程语言.它简洁.安全 ...