在本系列笔记的第12篇中,记录了txt文件和Excel文件的读写,详见:
【ArcGIS Pro二次开发】(12):txt文件和Excel文件的读写
在那篇文章里,只简单记录了txt文件和Excel文件的读写,近些天体验了Excel文件的操作,内容比较多,也比较复杂,所以这里再单独记一篇。
Excel文件打开和关闭这些框架代码就不再写了,可以看上面的帖子,这里就重点记录其它关键操作的核心代码,也不另外再放工程文件。
PS:以下操作都要用到【Interop.Microsoft.Office.Interop.Excel】,确保安装并引用。
分2种方式,一种是按第几行第几列,另一种是按【字母+数字】,如B5:
string value2 = worksheet.Cells[5, 2].Value.ToString(); // 取第5行第2列单元格的值
string value = worksheet.Range["B5"].Value.ToString(); // 取B5单元格的值
同样分2种方式写入单元格的值:
worksheet.Cells[5,2].Value = "标记内容"; // 设置第5行第2列单元格的值
worksheet.Range["B5"].Value = "标记内容"; // 设置B5单元格的值
还有另一种方法,直接清除单元格的值:
worksheet.Cells[5, 2].ClearContents(); // 清除单元格的值
worksheet.Rows[10].Delete(); // 删除行
worksheet.Columns[6].Delete(); // 删除列
worksheet.Rows[8].Insert(); // 插入行
worksheet.Columns[8].Insert(); // 插入列
worksheet.Rows[10].RowHeight = 40; // 修改行高
worksheet.Columns[10].ColumnWidth = 40; // 修改列宽
worksheet.Cells[14, 4].Font.Name = "宋体"; // 字体
worksheet.Cells[14, 4].Font.Color= System.Drawing.Color.Red; // 颜色
worksheet.Cells[14, 4].Font.Bold = true; // 加粗
worksheet.Cells[14, 4].Font.UnderLine = true; // 下划线
worksheet.Activate();
Worksheet newWorksheet = workbook.Worksheets.Add(); // 添加新工作表
newWorksheet.Name = "new"; // 设置工作表的名称
合并单元格的时候,Excel会弹出一个警告框,提示你是否要保留左上角单元格的值,这个功能在实际操作Excel的时候没什么,但是在工具运行时就很讨厌,会打断进程,所以这里【将警告提示设置为false】:
worksheet.Application.DisplayAlerts = false; // 禁用警告提示
Range mergeRange = worksheet.Range["F5:G6"]; // 获取要合并的单元格范围
mergeRange.Merge(); // 合并单元格
Range mergeRange = worksheet.Range["F1:G2"]; // 获取要取消合并的单元格范围
mergeRange.UnMerge(); // 取消单元格合并
先通过获取工作表中的活动区域,再获取总行数和总列数:
Range usedRange = worksheet.UsedRange; // 获取工作表中使用的区域
int rowCount = usedRange.Rows.Count; // 获取总行数
int columnCount = usedRange.Columns.Count; // 获取总列数
先通过Copy()方法将内容复制到剪贴板,再通过PasteSpecial()方法粘贴到指定的位置:
Range copyRange = worksheet.Range["B3:G7"]; // 选择要复制的单元格范围
copyRange.Copy(); // 复制单元格范围到剪贴板
Range pasteRange = worksheet.Range["B8"]; // 选择要粘贴的单元格
// 将剪贴板中的内容粘贴到指定单元格
pasteRange.PasteSpecial(XlPasteType.xlPasteAll, XlPasteSpecialOperation.xlPasteSpecialOperationNone, false, false);