C# EXCEL操作
1.引用Microsoft.Office.Interop.Excel
Microsoft.Office.Interop.Excel.Application excel= new Microsoft.Office.Interop.Excel.Application();//应用程序
excel.Visible = false;//可见性,运行程序时不可看到excel表格
excel.DisplayAlerts = false;//设置是否显示警告窗体
Workbook wbk = excel.Workbooks.Open(System.AppDomain.CurrentDomain.BaseDirectory + “standard.xlsx”);//打开运行路径的standard.xlsx工作簿
Worksheet wsh = wbk.Sheets[“All”];//打开工作簿中名为“All”的工作表
Worksheet wSheet1 = wbk.Worksheets[1] as Worksheet;//打开工作簿中第一个工作表(sheet从1开始数)
wSheet1 .Name = “newSheet”;//给sheet1表名重命名
int rows=wsh.UsedRange.Rows.Count;//获取"All"sheet中已使用的行数
int columns=wsh…UsedRange.Columns.Count;//获取"All"sheet中已使用的列数
string str = wsh.Cells[1, 1].Value.ToString();//读取
string customer=wsh.Cells[2, 1].Text.ToString();//读取对应cell
wsh.Cells[2, 1] = “str”;//写入,索引以1开始
/copy wsh的第一列粘贴到wSheet1的第二列/
Range sourceRange = wsh .Columns[1] as Range;
wsh .Copy();
Range destRange = wSheet1 .Columns[2] as Range;
destRange.Insert(XlDirection.xlToRight);
Microsoft.Office.Interop.Excel.Range range = (Microsoft.Office.Interop.Excel.Range)wSheet1.Cells[2, 7];
range.Interior.ColorIndex = 6;//给单元格第二行第七列设置颜色
wbk.Save();//保存
wbk.SaveAs(System.AppDomain.CurrentDomain.BaseDirectory + filename, XlFileFormat.xlOpenXMLWorkbook, Type.Missing, Type.Missing, Type.Missing, false, XlSaveAsAccessMode.xlNoChange, Type.Missing, Type.Missing, Type.Missing, Type.Missing, Type.Missing);//文件另存为filename
wbk= null;
excel.Quit();//退出
System.Runtime.InteropServices.Marshal.ReleaseComObject(excel);//释放
GC.Collect();
KeyMyExcelProcess.Kill(excel);// 强行杀Excel进程
强行杀excel进程
using System.Diagnostics;
Process[] process = Process.GetProcessesByName(“excel”);
foreach (Process p in process)
{
if (!p.HasExited)
{
p.Kill();
p.WaitForExit();
}
}
2.使用System.Data.OleDb;
连接字符串的设置:读取“.xls”时使用"Provider=Microsoft.Jet.OLEDB.4.0;Data Source=" + pathName + “;Extended Properties=‘Excel 8.0;HDR=Yes;IMEX=1;’” 读取“.xlsx”时使用 “Provider=Microsoft.ACE.OLEDB.12.0;Data Source=” + pathName + “;Extended Properties=‘Excel 12.0;HDR=Yes;IMEX=1;’”
其中HDR和IMEX的设置:
HDR=Yes,这代表第一行是标题,不做为数据使用,系统默认的是YES
当 IMEX=0 时为“汇出模式”,这个模式开启的 Excel 档案只能用来做“写入”用途。 0 —输出模式;
当 IMEX=1 时为“汇入模式”,这个模式开启的 Excel 档案只能用来做“读取”用途。 1—输入模式;
当 IMEX=2 时为“链接模式”,这个模式开启的 Excel 档案可同时支持“读取”与“写入”用途。2----链接模式(完全更新能力)
string dirname = System.AppDomain.CurrentDomain.BaseDirectory;
string excelname = “Capa_parameter.xlsx”;
string connstring = “Provider=Microsoft.ACE.OLEDB.12.0;Data Source=” + dirname + excelname + “;Extended Properties=‘Excel 8.0;HDR=YES;IMEX=1’;”;//HDR=YES第一行作为表头
using (OleDbConnection conn = new OleDbConnection(connstring))
{
conn.Open();
//System.Data.DataTable sheetsName = conn.GetOleDbSchemaTable(OleDbSchemaGuid.Tables, new object[] { null, null, null, “Table” }); //得到所有sheet的名字
//string firstSheetName = sheetsName.Rows[0][2].ToString();
string sql = string.Format(“SELECT * FROM [{0}]”, “Sheet1$”);
OleDbDataAdapter oda = new OleDbDataAdapter(sql, connstring);
DataSet set = new DataSet();
oda.Fill(set);
System.Data.DataTable dtt = set.Tables[0];
conn.Close();
for (int i =0;i
DataRow dr = dtt.Rows[i];
string t_dev = dr[“T-Device Name”].ToString().Trim();
string operation = dr[“Process Name”].ToString().Trim();
string cappic = dr[“Daily Capa”].ToString().Trim();
string utilization_Goal = dr[“Utilization Goal”].ToString().Trim().Replace("%", “”);
}
}
3.VS2010中c# Excel range使用报“object”未包含“get_Range”的定义解决方法
由于Framework版本不同,因此支持的也不一样
例如:
在 .NET Framework 3.5 語法(小括号)
Excel.Range r = sh.Range(sh.Cells[1, 1], sh.Cells[2, 2]);
在 .NET Framework 4.0-4.5 改用(方括号)
Excel.Range r = sh.Range[sh.Cells[1, 1], sh.Cells[2, 2]];
本文来自互联网用户投稿,文章观点仅代表作者本人,不代表本站立场,不承担相关法律责任。如若转载,请注明出处。 如若内容造成侵权/违法违规/事实不符,请点击【内容举报】进行投诉反馈!
