资源描述
______________________________________________________________________________________________________________
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 !!!
欢迎您的下载,资料仅供参考!
精品资料
展开阅读全文