把DataGrid的数据快速写入EXCEL
Python使用xlwings往excel中写入一行数据的两种方法

Python使用xlwings往excel中写入一行数据的两种方法使用xlwings库可以很方便地往Excel中写入数据。
下面介绍两种常用的写入一行数据的方法。
方法一:使用Range函数写入一行数据```import xlwings as xw# 打开指定的Excel文件wb = xw.Book('文件路径.xlsx')# 选择要写入数据的Sheetsht = wb.sheets['Sheet1']#定义要写入的数据data = ['项目A', '项目B', '项目C', '项目D']#写入数据sht.range('A1').expand(.value = data# 关闭Excel文件wb.savewb.close```方法二:使用扩展方式写入一行数据```import xlwings as xw# 打开指定的Excel文件wb = xw.Book('文件路径.xlsx')# 选择要写入数据的Sheetsht = wb.sheets['Sheet1']#定义要写入的数据data = ['项目A', '项目B', '项目C', '项目D'] # 获取当前Sheet中已经存在的最后一行last_row = sht.range(1,st_cell.row).end('up').row#写入数据sht.range(f'A{last_row+1}').value = data# 关闭Excel文件wb.savewb.close```以上是使用xlwings写入一行数据的两种方法,可以根据具体需求选择适合的方式。
方法一使用了expand(函数将单元格范围扩展到数据的长度,然后直接将数据赋值给该范围。
将DataGridView中的数据导出至Excel中(亲测成功)

将DataGridView中的数据导出至Excel(亲测成功)一、建立一个静态方法public static void ExportAsExcel(DataGridView dgv){OutputAsExcelFile(DGVHelper.DataGridViewToTable(dgv));}二、把DataGridView中的数据转换到DataTable中///<summary>///将DataGridView中的数据转换为DataTable包含隐藏列///</summary>///<param name="dgv"></param>///<returns></returns>public static DataTable DataGridViewToTable(DataGridView dgv){DataTable dt=new DataTable();//循环列标题名称,处理了隐藏的行不显示for(int count=0;count<dgv.Columns.Count;count++){if(dgv.Columns[count].Visible==true){dt.Columns.Add(dgv.Columns[count].HeaderText.ToString());}}//循环行,处理了隐藏的行不显示for(int count=0;count<dgv.Rows.Count;count++){DataRow dr=dt.NewRow();int curr=0;for(int countsub=0;countsub<dgv.Columns.Count;countsub++){if(dgv.Columns[countsub].Visible==true){if(dgv.Rows[count].Cells[countsub].Value!=null){dr[curr]=dgv.Rows[count].Cells[countsub].Value.ToString();}else{dr[curr]="";}curr++;}}dt.Rows.Add(dr);}return dt;}三、把DataTable中的数据导出到Excel中public static void OutputAsExcelFile(DataTable dt){if(dt.Rows.Count<=0){MessM.PromptInfo("提示","无数据!");return;}SaveFileDialog s=new SaveFileDialog{Title="保存Excel文件",Filter="Excel文件(*.xls)|*.xls",FilterIndex=1};if(s.ShowDialog()==DialogResult.OK)filePath=s.FileName;elsereturn;DTExportToExcel(dt);}///<summary>///第二步:导出dataTable到Excel///</summary>///<param name="dt"></param>private static void DTExportToExcel(DataTable dt){//第二步:导出dataTable到Excellong rowNum=dt.Rows.Count;//行数int columnNum=dt.Columns.Count;//列数Excel.Application m_xlApp=new Excel.Application{DisplayAlerts=false,//不显示更改提示Visible=false};Excel.Workbooks workbooks=m_xlApp.Workbooks;Excel.Workbook workbook=workbooks.Add(Excel.XlWBATemplate.xlWBATWorksheet);Excel.Worksheet worksheet=(Excel.Worksheet)workbook.Worksheets[1];//取得sheet1try{string[,]datas=new string[rowNum+1,columnNum];for(int i=0;i<columnNum;i++)//写入字段datas[0,i]=dt.Columns[i].Caption;//Excel.Range range=worksheet.get_Range(worksheet.Cells[1,1],worksheet.Cells[1, columnNum]);Excel.Range range=m_xlApp.Range[worksheet.Cells[1,1],worksheet.Cells[1, columnNum]];range.Interior.ColorIndex=15;//15代表灰色range.Font.Bold=true;range.Font.Size=10;int r=0;for(r=0;r<rowNum;r++){for(int i=0;i<columnNum;i++){object obj=dt.Rows[r][dt.Columns[i].ToString()];datas[r+1,i]=obj==null?"":"'"+obj.ToString().Trim();//在obj.ToString()前加单引號是为了防止自己主动转化格式}Application.DoEvents();//加入进度条}//Excel.Range fchR=worksheet.get_Range(worksheet.Cells[1,1], worksheet.Cells[rowNum+1,columnNum]);Excel.Range fchR=m_xlApp.Range[worksheet.Cells[1,1],worksheet.Cells[rowNum+1, columnNum]];fchR.Value2=datas;worksheet.Columns.EntireColumn.AutoFit();//列宽自适应。
C#DataGridView导出excel的几种方法

C#DataGridView导出excel的⼏种⽅法第⼀种、⾸先本form上游datagridview的控件及数据,再建⼀个button控件作为导出按钮,在按钮click事件中写⼊以下代码此乃数据集的⽅式,即先将数据放⼊数据集表⾥作为对象与excel⼀⼀对应//保存⽂件对话框SaveFileDialog sfd = new SaveFileDialog();sfd.Filter = "Excel⽂件|*.xlsx|Word⽂件|*.docx";sfd.FilterIndex = 0;if (sfd.ShowDialog() == DialogResult.OK){string search = "select * from 旧备件表 where(0=0)";if (this.textBox1.Text.Length > 0){search = search + " and 物料编码=" + "'" + textBox1.Text + "'";}if (this.textBox2.Text.Length > 0){search = search + " and 设备号=" + "'" + textBox2.Text + "'";}if (this.textBox3.Text.Length > 0){search = search + " and 物料描述 like" + "'%" + textBox3.Text + "%'";//实现物料描述的模糊查询}if (this.textBox4.Text.Length > 0){search = search + " and 备件序列号 like" + "'%" + textBox4.Text + "%'";//实现备件序列号的模糊查询}//调⽤导出Excel的⽅法,传⼊DataTable数据表和路径SqlDataAdapter sda = new SqlDataAdapter(search, DataBase.GetSqlConnection());System.Data.DataTable dt = new System.Data.DataTable();//将数据库中查到的数据填充到DataTable数据表sda.Fill(dt);ExportExcel(dt, sfd.FileName);}}void ExportExcel(System.Data.DataTable dt, string filepath){//创建Excel应⽤程序类的⼀个实例,相当于从电脑开始菜单打开ExcelApplicationClass xlsxapp = new ApplicationClass();//新建⼀张Excel⼯作簿Workbook wbook = xlsxapp.Workbooks.Add(true);//第⼀个sheet页Worksheet wsheet = (Worksheet)wbook.Worksheets.get_Item(1);//将DataTable的列名显⽰在Excel表第⼀⾏for (int i = 0; i < dt.Columns.Count; i++){//注意Excel表的⾏和列的索引都是从1开始的wsheet.Cells[1, i + 1] = dt.Columns[i].ColumnName;}//遍历DataTable,给Excel赋值for (int i = 0; i < dt.Rows.Count; i++){for (int j = 0; j < dt.Columns.Count; j++){//从第⼆⾏第⼀列开始写⼊数据wsheet.Cells[i + 2, j + 1] = dt.Rows[i][j];}}//保存⽂件wbook.SaveAs(filepath);//释放资源xlsxapp.Quit();}第⼆种、此乃直接将datagridview⾥的数据⼀⼀导出放⼊excel指定的单元格⾥。
c操作excel(多种方法比较)

c操作excel(多种方法比较)C#操作excel(多种方法比较)我们在做excel资料的时候,通常有以下方法。
一.导入导出excel常用方法:1.用查询表的方式查询并show在数据集控件上。
public static string strCon = " Provider =Microsoft.Jet.OLEDB.4.0 ; Data Source=C:\\08.xls;Extended Properties=Excel 8.0";public static DataSet ds;protected void Page_Load(object sender, EventArgs e){OleDbConnection conn = new OleDbConnection(strCon);string sql = "select * from [Sheet1$]";conn.Open();OleDbDataAdapter myCommand = new OleDbDataAdapter(sql, strCon);ds = new DataSet();myCommand.Fill(ds, "[Sheet1$]");conn.Close();datagrid1.DataMember = "[Sheet1$]";datagrid1.DataSource = ds;datagrid1.DataBind(); //Excel.Application excel = new Excel.Application();//excel.Application.Workbooks.Add(true);//excel.Visible = true;}2.一个一个单元格的进行插入1 string str = @"DataSource=IT-428E4EA4B0C7\SQLEXPRESS;InitialCatalog=TestBase;Integrated Security=True";2 SqlConnection conn = newSqlConnection(str);3 conn.Open();4 int n = 0;5 for (int i = 1; i < 20; i++)6 {7 if (n > 3)8 break;9 else10 if (msheet.Cells.get_Range("A" + i, Type.Missing).Text.ToString() == "" && n <= 3)11 { n++; }12 else13 {14 //循环获取excel单元格的值一次一次的插入,excuteSql为执行的存储过程15excuteSql(msheet.Cells.get_Range("B" + i,Type.Missing).Text.ToString(),16 msheet.Cells.get_Range("B" + (i + 1), Type.Missing).Text.ToString(),17 msheet.Cells.get_Range("B" + (i + 2), Type.Missing).Text.ToString(),18 conn);19 i = i + 3;2021 }22 }2324 conn.Close();二快速导入导出1.我们都知道当向db里批量插入数据的时候我们会选择SqlBulkCopyif (dataTable!=null &&dataTable.Rows.Count!=0){sqlBulkCopy.WriteToServer(dataTable);}这个可以看深山老林新发的一篇SQLServer中批量插入数据方式的性能对比下面是SqlBulkCopy的方法,这个方法有一个弊端就是当excel某一列即有文字,还有日期的时候,会出现null值,我在网上查了一些资料说连接字串加上;HDR=YES;IMEX=1'的时候会都当做字符处理,但是还是会出现一些bug,所以建议最好先把excel数据分析到datatable里然后再用SqlBulkCopy倒入数据库1 // block copy to DB from Excel2 //By xijun,3 //step 1 create an excel fileC:\Inetpub\wwwroot\test.xls , fill cell(1,1) with "Data",cell(1,2) with "name"4 //step 2 create table named "Data" with 2 column ("data","name") in your DB5 //there the code below:6 DateTime t1 = DateTime.Now;7 Response.Write("<br>start time:" +t1.ToString());8 string ExcelFile =@"C:\\20090916_Hub_Report.xls";9 string excelConnectionString =@"Provider=Microsoft.Jet.OLEDB.4.0;Data Source=" + ExcelFile + ";Extended Properties='Excel8.0;HDR=YES;IMEX=1'";1011 using (OleDbConnection excelConnection = new OleDbConnection(excelConnectionString))12 {1314 excelConnection.Open();15 //Getting source data16 //非空讀入數據17 OleDbCommand command = new OleDbCommand("Select[Region],[CustomerPN],[RMA],[Date],[QTY],[Return/Pull] FROM [20090916_Hub_Report$] ", excelConnection);18 // Initialize SqlBulkCopy object1920 using (OleDbDataReader dr = command.ExecuteReader())21 {22 // Copy data to destination23 string sqlConnectionString = @"Data Source=MININT-G87PHNA\SQLEXPRESS;Initial Catalog=GDS_Service;Integrated Security=True";24 using (SqlBulkCopy bulkCopy = new SqlBulkCopy(sqlConnectionString))25 {26bulkCopy.DestinationTableName = "GDS_Hub_data";27 //加入只加入一個列的話,那么就會其他數據庫列都默認為空。
c#中采用OLEDB方式来读取EXCEL文件和将数据写入EXCEL文件

c#中采⽤OLEDB⽅式来读取EXCEL⽂件和将数据写⼊EXCEL⽂件Microsoft Jet 提供程序⽤于连接到 Excel ⼯作簿。
在以下连接字符串中,Extended Properties 关键字设置 Excel 特定的属性。
“HDR=Yes;”指⽰第⼀⾏中包含列名,⽽不是数据,“IMEX=1;”通知驱动程序始终将“互混”数据列作为⽂本读取。
Excel 8.0 针对Excel2000及以上版本,Excel5.0 针对Excel97。
Provider=Microsoft.Jet.OLEDB.4.0;Data Source=D:/MyExcel.xls;Extended Properties=""Excel 8.0;HDR=Yes;IMEX=1""注意,Extended Properties 所需的双引号必须还要加双引号。
Provider=Microsoft.Jet.OLEDB.4.0只⽀持Office97-2003,不⽀持2007。
如果需要⽀持2007,使⽤ Provider='Microsoft.Ace.OLEDB.12.0使⽤打开、读取并关闭代码⽰例如下:using System.Data.OleDb;using System.Data;String sConnectionString = "Provider=Microsoft.Jet.OLEDB.4.0;" +"Data Source=c:/test.xls;" +"Extended Properties=Excel 8.0;";OleDbConnection objConn = new OleDbConnection(sConnectionString);objConn.Open();OleDbCommand objCmdSelect =new OleDbCommand("SELECT * FROM [sheet1]", objConn);OleDbDataAdapter objAdapter1 = new OleDbDataAdapter();objAdapter1.SelectCommand = objCmdSelect;DataSet objDataset1 = new DataSet();//将Excel中数据填充到数据集objAdapter1.Fill(objDataset1, "XLData");objConn.Close();另⼀版本参考代码:string ConnnectionString = string.Format(@"Provider='Microsoft.Ace.OLEDB.12.0';Data Source={0};" + "Extended Properties=Excel 8.0;", ExcelPath);OleDbConnection Excelconn = new OleDbConnection(ConnnectionString);try{Excelconn.Open();OleDbCommand Excelcomm = new OleDbCommand();//这段代码甚⾄可以让Connection重定向,根据实际需要选择该写,如果不需要重定向,From TableName就好了string ExcelCommText = string.Format("select * FROM [Excel 8.0;HDR=yes;DATABASE={0}].[{1}$]", ExcelPath, TableName);OleDbDataAdapter sda = new OleDbDataAdapter(ExcelCommText, Excelconn);DataSet ds = new DataSet();sda.Fill(ds);从上⾯可以看出,使⽤可将Excel当作普通数据库,使⽤SQL语句来操作。
C#实现连接数据库查询,将dgv控件数据导出和导入Excel

C#实现连接数据库查询,将dgv控件数据导出和导⼊Excel 前提:主页⾯主页⾯FOm1的代码DataTable dt = new DataTable();dt.Columns.Add("epc");dt.Columns.Add("crc");dt.Columns.Add("pc");dt.Columns.Add("time");dataGridView1.DataSource = dt;dataGridView1.Columns[0].Width = 205;dataGridView1.Columns[1].Width = 200;dataGridView1.Columns[2].Width = 190;dataGridView1.Columns[3].Width = 200;进度条⽅法代码:private void SetProgressMessage(int pro, ProgressBar proBar){//如果当前调⽤⽅不是创建控件的⼀⽅,则需要使⽤this.Invoke()//在这⾥,ProgressBar控件是由主线程创建的,所以⼦线程要对该控件进⾏操作//必须执⾏this.InvokeRequired进⾏判断。
if (this.InvokeRequired){DelSetPro setPro = new DelSetPro(SetProgressMessage);this.Invoke(setPro, new object[] { pro, proBar });}else{proBar.Value = Convert.ToInt32(pro);}}//调⽤进度条的主⽅法private void SleepForProgressBar01(){for (int i = 1; i <= 100; i++){Thread.Sleep(10);SetProgressMessage(i, progressBar1);}//DialogResult dr01 = MessageBox.Show("ProgressBar01 has been finished!");//if (dr01.Equals(DialogResult.OK))//{// SetProgressBarVisi(progressBar1);//}}好了,界⾯布局代码写好之后就开始写功能代码了第⼀步:连接数据,把数据库表的数据放⼊DGV控件⾥1、⾸先新建⼀个sqlbase类public class sqlbase{//我这⾥连接的是Sqlserver数据库(server:数据库服务器名称,database:你要操作的数据库名称,其余的是你的登录名称和密码)public static string ConnectionStr = "server=Lenovo;database=TEST;uid=sa;pwd=aa1997924";//这个⽅法表⽰可以对数据库进⾏增删改的操作public static int ExecuteNonQuery(string sql){int result = 0;using (SqlConnection con = new SqlConnection(ConnectionStr)) {if (con.State == ConnectionState.Closed){con.Open();}try{SqlCommand cmd = new SqlCommand(sql, con);result = cmd.ExecuteNonQuery();}catch{result = 0;}}return result;}//这个⽅法是对数据库进⾏查询public static DataSet GetDataTableBySql(string sql){//DataTable dt = new DataTable();DataSet ds = new DataSet();using (SqlConnection con = new SqlConnection(ConnectionStr)) {if (con.State == ConnectionState.Closed){con.Open();}try{SqlDataAdapter sda = new SqlDataAdapter(sql, con);sda.Fill(ds);}catch{ds = null;}}return ds;}2、双击查询按钮,在事件中写如下代码string strsql = "select * from test";//查询语句DataSet data1 = sqlbase.GetDataTableBySql(strsql); dataGridView1.DataSource = data1.Tables[0]; SleepForProgressBar01();点击查询按钮:如下显⽰第⼆步:将Excel导⼊1、在导⼊按钮事件中写如下代码:private void btn_daoru_Click(object sender, EventArgs e){try{//获取Excel⽂件路径和名称OpenFileDialog odXls = new OpenFileDialog();//指定相应的打开⽂档的⽬录 AppDomain.CurrentDomain.BaseDirectory定位到Debug⽬录,再根据实际情况进⾏⽬录调整string folderPath = AppDomain.CurrentDomain.BaseDirectory + @"databackup\";odXls.InitialDirectory = folderPath;// 设置⽂件格式odXls.Filter = "Excel files office2003(*.xls)|*.xls|Excel office2010(*.xlsx)|*.xlsx|All files (*.*)|*.*";//openFileDialog1.Filter = "图⽚⽂件(*.jpg)|*.jpg|(*.JPEG)|*.jpeg|(*.PNG)|*.png";odXls.FilterIndex = 2;odXls.RestoreDirectory = true;if (odXls.ShowDialog() == DialogResult.OK){this.txtFilePath.Text = odXls.FileName;this.txtFilePath.ReadOnly = true;string sConnString = string.Format("Provider=Microsoft.ACE.OLEDB.12.0;" + "Data Source={0};" + "Extended Properties='Excel8.0;HDR=NO;IMEX=1';", odXls.FileName);if ((System.IO.Path.GetExtension(txtFilePath.Text.Trim())).ToLower() == ".xls"){sConnString = "Provider=Microsoft.Jet.OLEDB.4.0;" + "data source=" + odXls.FileName + ";Extended Properties=Excel 5.0;Persist Security Info=False";//sConnString = "Provider=Microsoft.Jet.OLEDB.4.0;Data Source=" + txtFilePath.Text.Trim() + ";Extended Properties=\"Excel 8.0;HDR=" + strHead + ";IMEX=1\"";}using (OleDbConnection oleDbConn = new OleDbConnection(sConnString)){oleDbConn.Open();DataTable dt = oleDbConn.GetOleDbSchemaTable(OleDbSchemaGuid.Tables, new object[] { null, null, null, "TABLE" });//判断是否cmb中已有数据,有则清空if (cmbtablename.Items.Count > 0){cmbtablename.DataSource = null;cmbtablename.Items.Clear();}//遍历dt的rows得到所有的TABLE_NAME,并Add到cmb中foreach (DataRow dr in dt.Rows){cmbtablename.Items.Add((String)dr["TABLE_NAME"]);}if (cmbtablename.Items.Count > 0){cmbtablename.SelectedIndex = 0;}SleepForProgressBar01();// btnshow_Click();MessageBox.Show("导⼊成功");//加载Excel⽂件数据按钮// this.btnshow.Enabled = true;}}}catch (Exception ex){MessageBox.Show(ex.Message);}}2、点击导⼊后会弹框让你选择⽂件3、选择你要导⼊的Excel⽂件,显⽰如下界⾯,textbox控件会显⽰⽂件地址,combox会显⽰⽂件的多个分表第三步、将导⼊的⽂档放⼊DGV控件中1、新增⼀个加载⽅法private void btnshow_Click(){#region 读取相应的表名的Excel⽂件中数据到当前DataGridview中显⽰OleDbConnection ole = null;OleDbDataAdapter da = null;DataTable dt = null;string strConn = string.Format("Provider=Microsoft.ACE.OLEDB.12.0;" + "Data Source={0};" + "Extended Properties='Excel8.0;HDR=NO;IMEX=1';", txtFilePath.Text.Trim());if ((System.IO.Path.GetExtension(txtFilePath.Text.Trim())).ToLower() == ".xls"){strConn = "Provider=Microsoft.Jet.OLEDB.4.0;" + "data source=" + txtFilePath.Text.Trim() + ";Extended Properties=Excel 5.0;Persist Security Info=False";//sConnString = "Provider=Microsoft.Jet.OLEDB.4.0;Data Source=" + txtFilePath.Text.Trim() + ";Extended Properties=\"Excel 8.0;HDR=" + strHead + ";IMEX=1\"";}string sTableName = cmbtablename.Text.Trim();string strExcel = "select * from [" + sTableName + "]";try{ole = new OleDbConnection(strConn);ole.Open();da = new OleDbDataAdapter(strExcel, ole);dt = new DataTable();da.Fill(dt);this.dataGridView1.DataSource = dt;//因为⽣成Excel的时候第⼀⾏是标题,所以要做如下操作://1.修改DataGridView列头的名字,//2.数据列表中删除第⼀⾏for (int i = 0; i < dt.Columns.Count; i++){//dgvdata.Columns[i].AutoSizeMode = DataGridViewAutoSizeColumnMode.AllCells;//dgvdata.Columns[i].Name = dt.Columns[i].ColumnName;dataGridView1.Columns[i].HeaderCell.Value = dt.Rows[0][i].ToString();//c# winform ⽤代码修改DataGridView列头的名字,设置列名,修改列名}//DataGridView删除⾏dataGridView1.Rows.Remove(dataGridView1.Rows[0]);//删除第⼀⾏//dgvdata.Rows.Remove(dgvdata.CurrentRow);//删除当前光标所在⾏//dgvdata.Rows.Remove(dgvdata.Rows[dgvdata.Rows.Count - 1]);//删除最后⼀⾏//dgvdata.Rows.Clear();//删除所有⾏ole.Close();}catch (Exception ex){MessageBox.Show(ex.Message);}finally{if (ole != null)ole.Close();}#endregion}2、在加载按钮事件中调⽤上⾯⽅法即可3、点击加载按钮,如下显⽰注意:这⾥可以选择,第⼆个分表进⾏导⼊(导⼊的字段名可以和绑定dgv列名不同,并不限制列的个数)第四部:导出Excel(将dgv控件的数据表导出Excel⽂档)1、新建⽅法导出⽅法private void ExportExcels(string fileName, DataGridView myDGV){string saveFileName = "";SaveFileDialog saveDialog = new SaveFileDialog();saveDialog.DefaultExt = "xls";saveDialog.Filter = "Excel⽂件|*.xls";saveDialog.FileName = fileName;saveDialog.ShowDialog();saveFileName = saveDialog.FileName;if (saveFileName.IndexOf(":") < 0) return; //被点了取消Microsoft.Office.Interop.Excel.Application xlApp = new Microsoft.Office.Interop.Excel.Application();if (xlApp == null){MessageBox.Show("⽆法创建Excel对象,可能您的机⼦未安装Excel");return;}Microsoft.Office.Interop.Excel.Workbooks workbooks = xlApp.Workbooks;Microsoft.Office.Interop.Excel.Workbook workbook = workbooks.Add(Microsoft.Office.Interop.Excel.XlWBATemplate.xlWBATWorksheet); Microsoft.Office.Interop.Excel.Worksheet worksheet = (Microsoft.Office.Interop.Excel.Worksheet)workbook.Worksheets[1];//取得sheet1//写⼊标题for (int i = 0; i < myDGV.ColumnCount; i++){worksheet.Cells[1, i + 1] = myDGV.Columns[i].HeaderText;}bel6.Visible = true;bel6.Text = myDGV.Rows.Count.ToString();//总进度//写⼊数值for (int r = 0; r < myDGV.Rows.Count; r++){bel3.Visible = true;bel3.Text = r.ToString();//实时进度for (int i = 0; i < myDGV.ColumnCount; i++){worksheet.Cells[r + 2, i + 1] = myDGV.Rows[r].Cells[i].Value;}System.Windows.Forms.Application.DoEvents();}worksheet.Columns.EntireColumn.AutoFit();//列宽⾃适应if (saveFileName != ""){try{workbook.Saved = true;workbook.SaveCopyAs(saveFileName);}catch (Exception ex){MessageBox.Show("导出⽂件时出错,⽂件可能正被打开!\n" + ex.Message);}}xlApp.Quit();GC.Collect();//强⾏销毁MessageBox.Show("⽂件: " + fileName + ".xls 保存成功", "信息提⽰", MessageBoxButtons.OK, rmation); }2、在导出事件写如下代码private void btnshow_Click(object sender, EventArgs e){if (this.dataGridView1.Rows.Count<=0){MessageBox.Show("当前没有可导出的数据!");return;}string a = "D:" + "\\KKHMD.xls";ExportExcels(a, dataGridView1);}3、单击导出,显⽰如下,选择保存地址注意:我这⾥添加了进度显⽰:4、导出成功好了,⾄此所有功能以实现1、连接数据库,将数据绑定到的dgv控件2、Excel的导⼊3、Excel的导出。
【整理】Python中,添加写入数据到已经存在的Excel的xls文件,即打开excel文...

【整理】Python中,添加写⼊数据到已经存在的Excel的xls⽂件,即打开excel⽂...【整理】Python中,添加写⼊数据到已经存在的Excel的xls⽂件,即打开excel⽂件,写⼊新数据2013 年 1 ⽉ 16 ⽇下午 1:22crifan已有2890⼈围观3个评论背景Python中,想要打开已经存在的excel的xls⽂件,然后在最后新的⼀⾏的数据。
折腾过程1.找到了参考资料:writing to existing workbook using xlwt其实是没有直接实现:打开已有的excel⽂件,然后在⽂件最后写⼊,添加新数据的函数的。
只不过,可以利⽤:Working with Excel Files in Python中的库,组合实现。
2. writing to existing workbook using xlwt给出了⽰例代码:1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20rom xlutils.copy import copy # /pypi/xlutilsfrom xlrd import open_workbook # /pypi/xlrdfrom xlwt import easyxf # /pypi/xlwtSTART_ROW =297# 0 based (subtract 1 from excel row number)col_age_november =1col_summer1 =2col_fall1 =3rb =open_workbook(file_path,formatting_info=True)r_sheet =rb.sheet_by_index(0) # read only copy to introspect the filewb =copy(rb) # a writable copy (I can't read values out of this, only write to it) w_sheet =wb.get_sheet(0) # the sheet to write to within the writable copyfor row_index in range(START_ROW, r_sheet.nrows):age_nov =r_sheet.cell(row_index, col_age_november).valueif age_nov ==3:#If 3, then Combo I 3-4 year old for both summer1 and fall1w_sheet.write(row_index, col_summer1, 'Combo I 3-4 year old')w_sheet.write(row_index, col_fall1, 'Combo I 3-4 year old')22wb.save(file_path +'.out'+os.path.splitext(file_path)[-1]) 3. 刚⼜看到,有更简洁的代码:1 2 3 4from xlutils.copy import copy w =copy('book1.xls')w.get_sheet(0).write(0,0,"foo") w.save('book2.xls')4.现在打算去试试。
DataGridView剪切板的操作

以下,是粘贴时简单的事例代码,将拷贝数据粘贴到以选择单元格开始的区域内。
[]
' 当前单元格是否选择的判断
If DataGridView1.CurrentCell Is Nothing Then
Return
End If
Dim insertRowIndex As Integer = DataGridView1.CurrentCell.RowIndex
ClipboardCopyMode 还可以设定 Header部分是否拷贝: EnableAlwaysIncludeHeaderText 拷贝Header部分、EnableWithoutHeaderText 则不拷贝。默认是 EnableWithAutoHeaderText , Header 如果选择了的话,就拷贝。
DataGridView 剪切板的操作
DataGridView.ClipboardCopyMode 属性被设定为 DataGridViewClipboardCopyMode.Disable 以外的情况时,「Ctrl + C」按下的时候,被选择的单元格的内容会拷贝到系统剪切板内。格式有: Text, UnicodeText,Html, CommaSeparatedValue。可以直接粘贴到 Excel 内。
[attach]691256[/attach]
4,此时会发现VB2005提示有很多错误,这是因为工程缺少对System.Drawing引用,添加引用System.Drawing后错误消失
[attach]691257[/attach]
5,现在我们让DataGridViewExt从DataGridView继承下来,在DataGridViewExt.design.vb文件中将
- 1、下载文档前请自行甄别文档内容的完整性,平台不提供额外的编辑、内容补充、找答案等附加服务。
- 2、"仅部分预览"的文档,不可在线预览部分如存在完整性等问题,可反馈申请退款(可完整预览的文档不适用该条件!)。
- 3、如文档侵犯您的权益,请联系客服反馈,我们会尽快为您处理(人工客服工作时间:9:00-18:30)。
把DataGrid的数据快速写入EXCEL
第一VB论坛上()的朋友经常提出“怎样把DataGrid的数据快速写入EXCEL”这个问题,也看了很多用VB控制EXCEL报表的文章和实例,总的感觉是用EXCEL对象一个格子一个格子的写,速度太慢。
看过一些国内外的大型软件,注意到他们对数据的报表处理也是写到EXCEL 里面,显然,EXCEL对数据报表的处理确实强大和流行,既然如此,就按照鲁迅先生的主张:“拿来!”。
要解决的第一个问题是速度。
很多朋友在使用EXCEL对象的时候只注意到它是个可以控制的对象,而忽略了EXCEL也可以作为一个数据库使用,它的名字就是数据库的名字,工作表就是一张数据库中的表,这样话,库之间数据的迁移使用SQL语句要快多了。
第二个问题是DataGrid作为显示数据的网格控件,任何时候不能当作数据库使用。
因此在要把它的数据输出的时候可以考虑找它显示的数据源,把它的查询条件与输出的查询条件相一致就完全可以实现我们的目的。
本事例演示了不同的数据源写入EXCEL,在VB6+WIN98下面调试通过。
要使用它必须做到以下3点:
1.在当前目录里面有一个ACCESS数据库,里面有"毕业学生","在校学生"和"退学学生"三张表,每张表里面有"班级","姓名","性别","家庭住址"和"工作单位"等字段,以及一些数据。
2.要从"工程"→"引用"里面引用Microsoft Active Data Objects 2.1 Library和Microsoft DAO 3.6 Object Library两个对象库。
3.EXCEL的安装路径是默认安装路径。
在窗体上面放置一个DataGrid和三个CommandButton,把下列代码复制到里面,并按F5运行,就可以实现我们的目的。
代码如下:
'声明API函数
Private Declare Function FindWindow Lib "user32" Alias "FindWindowA" (ByVal lpClassName As String, ByVal lpWindowName As String) As Long
'定义变量
Dim Cnn1 As New ADODB.Connection
Dim rst1 As New ADODB.Recordset
Dim StrSQL As String
Dim TabName As String
Dim Selection As String
Private Sub Command1_Click()
'设置第一个数据源的查询条件
TabName = "毕业学生"
Selection = "班级,姓名,工作单位"
'获取数据
ReqData
End Sub
Private Sub Command2_Click()
'设置第二个数据源的查询条件
TabName = "在校学生"
Selection = "*"
'获取数据
ReqData
End Sub
Private Sub Command3_Click()
'设置第三个数据源的查询条件
TabName = "退学学生"
Selection = "班级,姓名,性别"
'获取数据
ReqData
End Sub
Private Sub Command4_Click()
'如果EXCEL文件已经打开,需要先关闭它.
Dim lpClassName As String
Dim lpCaption As String
Dim Handle As Long
lpClassName = "XLMAIN"
lpCaption = "Microsoft Excel - MyExcel.xls"
Handle = FindWindow(lpClassName$, lpCaption$)
If Handle <> 0 Then
MsgBox "请先关闭EXCEL文件!", vbOKOnly + vbInformation, "不能对已经打开的文件进行写操作!"
Exit Sub
End If
'检查EXCEL文件是否存在,如果存在则删除
If Dir(App.Path & "\MyExcel.xls") <> "" Then Kill App.Path & "\MyExcel.xls"
'进行数据转换
Dim dbs As Database
'打开数据库
Set dbs = OpenDatabase(App.Path & "\db1.mdb")
'把数据导入EXCEL
dbs.Execute "SELECT " & Selection & " INTO [Excel 8.0;DATABASE=" & App.Path &
"\MyExcel.xls].[WorkSheet1] FROM " & TabName
'关闭数据库对象
dbs.Close
'释放数据库对象
Set dbs = Nothing
'调用EXCEL打开产生的EXCEL表格
Shell "C:\Program Files\Microsoft Office\Office\EXCEL.EXE " & App.Path & "\MyExcel.xls", vbMaximizedFocus
End Sub
Private Sub ReqData()
'设置查询语句
StrSQL = "SELECT " & Selection & " FROM " & TabName
'如果数据库已打开的则先关闭,防止出错
If Cnn1.ConnectionString <> "" Then Cnn1.Close
'打开数据库
Cnn1.Open "Provider=Microsoft.Jet.OLEDB.3.51; Data Source=" & App.Path & "\db1.mdb;"
'设置记录集的打开方式和锁的机制等
With rst1
.CursorType = adOpenKeyset
.LockType = adLockOptimistic
.Open StrSQL, Cnn1, , , adCmdText
End With
'为DataGrid1设置数据源
Set DataGrid1.DataSource = rst1
DataGrid1.Refresh
'为DataGrid1设置标题,并显示记录数
DataGrid1.Caption = "表[" & TabName & "]共" & rst1.RecordCount & "条记录"
End Sub
Private Sub DataGrid1_RowColChange(LastRow As Variant, ByVal LastCol As Integer) '为DataGrid1设置标题,并显示记录数,用此事件是防止操作员删除记录后记录数发生变化DataGrid1.Caption = "表[" & TabName & "]共" & rst1.RecordCount & "条记录"
End Sub
本事例只是演示了ACCESS数据库和DataGrid以及简单的查询,对于其他类型的数据库和网格控件以及复杂的查询都可以参照本例进行修改使用,希望对大家的编程有所启发。
以上示例代码如需要,可写信duyunqing@索取。