好吧,进园子这么长时间了,第一次写博文,欢迎拍砖!
关于excel的一些基本操作:
1、引用
开发excel插件,这两个引用是必不可少的。
using Microsoft.Office.Interop.Excel; using Microsoft.Office.Tools.Ribbon;
2、 工作簿、工作表、单元格的操作
ApplicationClass application = new ApplicationClass(); //创建一个excel进程 Workbook wbook = Globals.ThisAddIn.Application.ActiveWorkbook; //当前活动workbook Worksheet worksheet = (Worksheet)wbook.ActiveSheet; //当前活动sheet Range range = (Range)worksheet.Application.Selection;//当前选中的cells
根据条件选择指定的sheet:
Worksheet worksheet = wbook.Worksheets["sheet1"];//获取名为sheet1的工作表 Worksheet worksheet = wbook.Worksheets[1];//获取第一个工作表
其他的操作:
workSheet.Range[workSheet.Cells[range.Row,1],workSheet.Cells[workSheet.UsedRange.Rows.Count,workSheet.UsedRange.Columns.Count]].Clear();//清除当前选定行以下的所有数据 workSheet.UsedRange.Rows.Count//已使用的行数 workSheet.UsedRange.Columns.Count//已使用的列数 worksheet.Range["A1"].Font.ColorIndex = 3;//将“A1”单元格字体设为红色 worksheet.Range["A1","B2"].Interior.ColorIndex = 3; //将“A1”到“B2”范围背景设为红色 int num = wss1.Range[wss1.Cells[1, Y1]].Find("").Row; //第一次出现空单元格的行数 worksheet.Cells["A1"].Rows.Hidden=true;//隐藏行 worksheet.Cells["A1"].Columns.Hidden=true;//隐藏列
range与cells的区别不大,最重要的事range的范围比cells大;
当然,用C#遍历所有单元格时若遇到空单元格,有可能会弹出“无法对null执行运行时绑定”,此时对单元格判断是否为空并用正则表达式匹配数字,然后比较大小的方法(将所有小于6的数字字体设为红色):
1 string str = Convert.ToString(worksheet.Cells[i, j].value); 2 string regex = @"^[1-9]\d*|0$"; 3 if (str != null && Regex.IsMatch(str, regex)) 4 { 5 if (Convert.ToDouble(str) < 6) 6 { 7 worksheet.Cells[i, j].Font.ColorIndex = 3; 8 } 9 }
3、 图表生成
(1)以下是生成柱状图的方法(绑定数据的两种方法,一种是连续绑定数据,数据是连续的;另一种是部分绑定,数据是不连续的):
1 wbook.Charts.Add(Type.Missing); //添加一個页面 2 wbook.ActiveChart.ChartType = XlChartType.xlColumnClustered; //设置要显示的图表样式(簇状条形图) 3 Range rang = worksheet.get_Range(strx + "," + stry); 4 wbook.ActiveChart.SetSourceData(rang, XlRowCol.xlColumns);//数据不连续 5 //wbook.ActiveChart.SetSourceData(ws.Range["A1",ws.Cells[ws.UsedRange.Rows.Count,ws.UsedRange.Columns.Count]], XlRowCol.xlRows);//绑定数据,数据是连续的 6 //wbook.ActiveChart.SetSourceData(ws.Range["A1","A40"], XlRowCol.xlColumns);//绑定数据,柱状图中图柱所代表的数据 7