收藏 分销(赏)

c#-读写Excel单元格.docx

上传人:a199****6536 文档编号:2277229 上传时间:2024-05-24 格式:DOCX 页数:7 大小:23.82KB 下载积分:6 金币
下载 相关 举报
c#-读写Excel单元格.docx_第1页
第1页 / 共7页
c#-读写Excel单元格.docx_第2页
第2页 / 共7页


点击查看更多>>
资源描述
______________________________________________________________________________________________________________ c# 读写Excel单元格 以下是一些对excel的一些基本操作 1:工程对excel类库的导入,如:c:\program files\Microsoft office\offiece11\excel.exe 2:命名控件的引入: using Microsoft.office.Interop.Excel; 3:如果是对一个已经存在的excel文件进行操作则: //创建一个新的Excel应用对象 Microsoft.office.Interop.Excel.Application app = new Microsoft.office.Interop.Excel.Application(); //按照文件路径以及文件名打开此Excel Workbook wbook=app.Workbooks.Open("c:\\temp.xls",Type.Missing,Type.missing,Type.missing,Type.missing,Type.missing,Type.missing,Type.missing,Type.missing,Type.missing,Type.missing,Type.missing,Type.missing,Type.missing,Type.missing); //设定读取该Excel的第一个工作簿 Worksheet worksheet=(Worksheet)wbook.Worksheets[1]; 4:如果是新建一个excel文件: Application app=new Application(); Workbook wbook=app.Workbook.Add(Type.missing); Worksheet worksheet=(Worksheet)wbook.Worksheets[1]; 5:设置某个单元格里的内容: worksheet.Cells[1,2]="内容"; 6读取某个单元格里的内容 string temp=((Range)worksheet.Cells[1,2]).Text.ToString(); 7设置某个单元格里的格式 Excel.Range rtemp=worksheet.get_Range("A1","A1"); rtemp.Font.Name="宋体"; rtemp.Font.FontStyle="加粗"; rtemp.Font.Size=5; 8 保存新建的内容: worksheet.SaveAs ("c:\\temp.xls",Type.missing,Type.missing,Type.missing,Type.missing,Type.missing,Type.missing,Type.missing,Type.missing); 程序退出后,进程中依然有excel。搜索了不少的文章,发现多少都有点问题,伪代码太多,很多根本无法运行的也帖出来。研究了几天之后,大致给出Kill进程的方法和GC.Collect的方法。 GC.Collect的代码是: /// <summary> /// 读取xls(用GC的方法,手工设置book为null) /// </summary> private void ReadXlsGetRangeA1() { string path = "C:\\abc.xls"; // 判断文件不存在,返回 if (!File.Exists(path)) { return; } Excel.Application excel = new Excel.ApplicationClass(); // 某人 //Excel.Workbooks workbooks = null; // 不用单独定义也可以 Excel.Workbook book = null; Excel.Worksheet sheet = null; Excel.Range range = null; object oV = System.Reflection.Missing.Value; // 反复用到 try { // 步骤1:打开某人的表xls book = excel.Workbooks.Open(path, oV, oV, oV, oV, oV, oV, oV, oV, oV, oV, oV, oV, oV, oV); // 打开一个工作簿 sheet = (Excel.Worksheet)excel.ActiveSheet;// 获取当前工作表 sheet.Name = "Salary详细"; // 修改工作表的名字 excel.Visible = false; // 步骤2:读取数据 range = sheet.Cells.get_Range("A1", "A1"); //读取第一行第一列的内容 this.Text = range.Value2.ToString(); // 现在是form的标题 // 步骤3:保存表格 book.Save(); // 步骤4:关闭book excel.Workbooks.Close(); } catch (Exception ex) { MessageBox.Show(ex.Message); } finally { System.Runtime.InteropServices.Marshal.ReleaseComObject(book); System.Runtime.InteropServices.Marshal.ReleaseComObject(sheet); System.Runtime.InteropServices.Marshal.ReleaseComObject(range); System.Runtime.InteropServices.Marshal.ReleaseComObject(excel); book = null; sheet = null; range = null; excel = null; GC.Collect(); // 前提是:所有的对象都=null后才能调用此函数,然后才会结束“任务管理器”中的excel.exe进程 } } 用Kill的方法的代码是: using System.Runtime.InteropServices; // DllImport用 [DllImport("User32.dll", CharSet = CharSet.Auto)] public static extern int GetWindowThreadProcessId(IntPtr hwnd, out int ID); /// <summary> /// 读取xls(用kill的方法) /// </summary> private void KillReadXlsGetRangeA1() { string path = "C:\\abc.xls"; // 判断文件不存在,返回 if (!File.Exists(path)) { return; } Excel.Application excel = new Excel.ApplicationClass(); // 某人 //Excel.Workbooks workbooks = null; // 不用单独定义也可以 Excel.Workbook book = null; Excel.Worksheet sheet = null; Excel.Range range = null; object oV = System.Reflection.Missing.Value; // 反复用到 try { // 步骤1:打开某人的表xls book = excel.Workbooks.Open(path, oV, oV, oV, oV, oV, oV, oV, oV, oV, oV, oV, oV, oV, oV); // 打开一个工作簿 sheet = (Excel.Worksheet)excel.ActiveSheet;// 获取当前工作表 sheet.Name = "Salary详细"; // 修改工作表的名字 excel.Visible = false; // 步骤2:读取数据 range = sheet.Cells.get_Range("A1", "A1"); //读取第一行第一列的内容 this.Text = range.Value2.ToString(); // 现在是form的标题 // 步骤3:保存表格 book.Save(); // 步骤4:关闭book excel.Workbooks.Close(); } catch (Exception ex) { MessageBox.Show(ex.Message); } finally { excel.Quit(); //excel = null; // 注意:如果要获得excel的Hwnd,不能设置excel = null。 IntPtr t = new IntPtr(excel.Hwnd); int k = 0; GetWindowThreadProcessId(t, out k); System.Diagnostics.Process p = System.Diagnostics.Process.GetProcessById(k); p.Kill(); } } Kill的方法参考了 的代码 而 显然是错误的,设置了null后无法获得句柄。 我们研究一下最简单的例子: /// <summary> /// 读取xls(最简洁的方式,什么变量都不用,只是用excel, 程序释放后才会终止excel进程) /// </summary> private void ReadXlsEasy() { // 什么变量都不用,只是用excel, 最后excel.Quit() excel = null都无法退出 // 结论:必须用GC.Collect() 结束;否则,只能等程序释放后进程中的excel才会退出 Excel.Application excel = new Excel.ApplicationClass(); // 某人 try { excel.Visible = false; } catch (Exception ex) { MessageBox.Show(ex.Message); } finally { excel.Quit(); excel = null; //GC.Collect(); // 如果强制对所有代进行垃圾回收,那么不退出程序,excel进程也会终止 } } Welcome To Download !!! 欢迎您的下载,资料仅供参考! 精品资料
展开阅读全文

开通  VIP会员、SVIP会员  优惠大
下载10份以上建议开通VIP会员
下载20份以上建议开通SVIP会员


开通VIP      成为共赢上传

当前位置:首页 > 包罗万象 > 大杂烩

移动网页_全站_页脚广告1

关于我们      便捷服务       自信AI       AI导航        抽奖活动

©2010-2026 宁波自信网络信息技术有限公司  版权所有

客服电话:0574-28810668  投诉电话:18658249818

gongan.png浙公网安备33021202000488号   

icp.png浙ICP备2021020529号-1  |  浙B2-20240490  

关注我们 :微信公众号    抖音    微博    LOFTER 

客服