1、 c# 读写Excel单元格 以下是一些对excel的一些基本操作 1:工程对excel类库的导入,如:c:\program files\Microsoft office\offiece11\excel.exe 2:命名控件的引入: using Microsoft.office.Interop.Excel; 3:如果是对一个已经存在的excel文件进行操作则
2、 //创建一个新的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,Ty
3、pe.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.Works
4、heets[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.SaveA
5、s
("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的代码是:
///
6、 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; Exc
7、el.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详细"; // 修改工作表的名字
8、 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.Runt
9、ime.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 =
10、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);
///
11、xls(用kill的方法) /// 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; E
12、xcel.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;// 获取当前工作表 shee
13、t.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.Mess
14、age); } 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的方法参考了 的代码 而 显然是错误的,设
15、置了null后无法获得句柄。
我们研究一下最简单的例子:
///






