【ArcGIS Pro二次开发】(85):Aspose.Cells中的Excel操作

Aspose.Cells是一款功能强大的Excel文档处理和转换控件,开发人员和客户电脑无需安装Microsoft Excel也能在应用程序中实现类似Excel的强大数据管理功能。


1、获取工作薄Workbook
cs 复制代码
string excelFile = "C:\Users\Administrator\Desktop\FE.xlsx";
Workbook wb = OpenWorkbook(excelFile);
2、获取工作表对象Worksheet
cs 复制代码
// 按序号
Worksheet sheet = wb.Worksheets[0];
// 按sheet名
Worksheet sheet = wb.Worksheets["sheet1"];
**3、**获取Cells、Cell
cs 复制代码
// 获取Cells
Cells cells = sheet.Cells
// 获取Cell,序号从0开始
Cell cell = cells[1,2]
4、读取、写入Cell值
cs 复制代码
// 读取cell值
var va = cell.Value;
string va = cell.StringValue;
...
// 写入cell值
cell.Value = "这是一个写入值";
cell.PutValue("写入值");
**5、**获取并设置单元格样式
cs 复制代码
// 获取style
Style style = cell.GetStyle();
// 数字型
style.Number = 4;
// 数字格式
style.Custom = "0.00";

// 设置style
cell.SetStyle(style);

更多详细设置:

cs 复制代码
style.HorizontalAlignment = TextAlignmentType.Center;//文字居中
style.Font.Name = "宋体";//文字字体
style.Font.Size = 22;//文字大小
style.IsLocked = false;//单元格解锁
style.Font.IsBold = true;//粗体
style.ForegroundColor = Color.FromArgb(0xaa, 0xcc, 0xbb);//设置背景色
style.Pattern = BackgroundType.Solid; //设置背景样式
style.IsTextWrapped = true;//单元格内容自动换行
style.Borders[BorderType.LeftBorder].LineStyle = CellBorderType.Thin; //应用边界线 左边界线
style.Borders[BorderType.RightBorder].LineStyle = CellBorderType.Thin; //应用边界线 右边界线
style.Borders[BorderType.TopBorder].LineStyle = CellBorderType.Thin; //应用边界线 上边界线
style.Borders[BorderType.BottomBorder].LineStyle = CellBorderType.Thin; //应用边界线 下边界线
6、保存Workbook并释放
cs 复制代码
// 保存
wb.Save(excelFile);
wb.Dispose();
**7、**删除行
cs 复制代码
// 获取Cells
Cells cells = sheet.Cells
// 删除单行,序号从0开始
cells.DeleteRow(3);
// 删除多行,参数2为要删的行数
cells.DeleteRows(3,10);
**8、**删除列
cs 复制代码
// 获取Cells
Cells cells = sheet.Cells
// 删除列,序号从0开始
cells.DeleteColumn(3);
// 删除多列,参数2为要删的列数
cells.DeleteColumns(3,10);
9、复制行(复制列同理)
cs 复制代码
// 获取Cells
Cells cells = sheet.Cells
// 复制单行,从参数2复制到参数3
cells.CopyRow(cells, 83, 85);
// 复制多行,参数4为要复制的行数
cells.CopyRows(cells, 83, 168 + i * 85, 85);
10、强制更新计算公式、设置公式
cs 复制代码
//强制更新计算公式
wb.CalculateFormula();
//给单元格设置计算公式
cell.Formula = "=AVERAGE(B1:E1)";
11、设置行高列宽
cs 复制代码
//设置行高
cells.SetRowHeight(0, 20); 
//设置列宽
cells.SetColumnWidth(1, 30);
12、合并、取消合并单元格
cs 复制代码
// 参数:起始行,起始列,行数,列数
cells.Merge(0, 0, 1, 5);
// 参数:起始行,起始列,行数,列数
cells.UnMerge(4, 2, 2, 3);
13、插入行、列
cs 复制代码
// 在序号处插入一行
cells.InsertRow(5);
// 参数2为插入的行数
cells.InsertRows(5,3);

cells.InsertColumn(5);
cells.InsertColumns(5,3);
14、将字典dict的值映射写入Excel文件
cs 复制代码
public static void ExcelAttributeMapper(string excelPath, int sheet_in_col, int sheet_map_col, Dictionary<string, string> dict, int startRow = 0)
{
    // 打开工作薄
    Workbook wb = OpenWorkbook(excelPath);
    // 打开工作表
    Worksheet sheet = wb.Worksheets[0];
    // 逐行处理
    for (int i = startRow; i <= sheet.Cells.MaxDataRow; i++)
    {
        //  获取目标cell
        Cell inCell = sheet.Cells[i, sheet_in_col];
        Cell mapCell = sheet.Cells[i, sheet_map_col];
        // 属性映射
        if (inCell is not null && dict.ContainsKey(inCell.StringValue))
        {
            mapCell.Value = dict[inCell.StringValue];   // 赋值
        }
    }
    // 保存
    wb.Save(excelFile);
    wb.Dispose();
}
15、简单的写入值
cs 复制代码
public static void ExcelWriteCell(string excelPath, int row, int col, string cell_value)
{
    // 打开工作薄
    Workbook wb = OpenWorkbook(excelPath);
    // 打开工作表
    Worksheet sheet = wb.Worksheets[0];
    // 获取cell
    Cell cell = sheet.Cells[row, col];
    // 写入cell值
    cell.Value = cell_value;
    // 保存
    wb.Save(excelFile);
    wb.Dispose();
}
16、Excel设置单元格的格式
cs 复制代码
public static void ExcelSetColStyle(string excelPath, int col, int startRow, int styleNumber = 4, int digit = 2)
{
    // 打开工作薄
    Workbook wb = OpenWorkbook(excelPath);
    // 打开工作表
    Worksheet sheet = wb.Worksheets[0];

    for (int i = startRow; i <= sheet.Cells.MaxDataRow; i++)
    {
        // 获取cell
        Cell cell = sheet.Cells[i, col];
        // 获取style
        Style style = cell.GetStyle();
        // 数字型
        style.Number = styleNumber;
        // 小数位数
        if (digit == 1) { style.Custom = "0.0"; }
        else if (digit == 2) { style.Custom = "0.00"; }
        else if (digit == 3) { style.Custom = "0.000"; }
        else if (digit == 4) { style.Custom = "0.0000"; }
    }

    // 保存
    wb.Save(excelFile);
    wb.Dispose();
}
**17、**删除Excel表中的0值行【指定多个列】
cs 复制代码
private static List<int> ExcelDeleteNullRowResult(string excelPath, List<int> deleteCols, int startRow = 0)
{
    List<int> list = new List<int>();

    // 打开工作薄
    Workbook wb = OpenWorkbook(excelPath);
    // 打开工作表
    Worksheet sheet = wb.Worksheets[0];

    // 强制更新表内的公式单元格
    wb.CalculateFormula();

    // 找出0值行
    for (int i = sheet.Cells.MaxDataRow; i >= startRow; i--)
    {
        // 设置一个flag
        bool isNull = true;
        // 循环查找各列的值
        foreach (var deleteCol in deleteCols)
        {
            Cell cell = sheet.Cells.GetCell(i, deleteCol);
            if (cell != null)  // 值不为空
            {
                string str = cell.StringValue;
                if (str != "") // 值不为0
                {
                    if (double.Parse(str) != 0)
                    {
                        isNull = false;
                        break;
                    }
                }
            }
        }
        // 输出删除列
        if (isNull)
        {
            list.Add(i);
        }
    }
    // 保存
    wb.Save(excelFile);
    wb.Dispose();
    // 返回值
    return list;
}
18、从Excel文件中获取Dictionary
cs 复制代码
public static Dictionary<string, string> GetDictFromExcel(string excelPath, int col1 = 0, int col2 = 1)
{
    // 定义字典
    Dictionary<string, string> dict = new Dictionary<string, string>();
    // 打开工作薄
    Workbook wb = OpenWorkbook(excelPath);
    // 打开工作表
    Worksheet sheet = wb.Worksheets[0];
    // 获取key和value值
    for (int i = 0; i <= sheet.Cells.MaxDataRow; i++)
    {
        Cell key = sheet.Cells[i, col1];
        Cell value = sheet.Cells[i, col2];
        if (key != null && value != null)
        {
            if (!dict.ContainsKey(key.StringValue))
            {
                if (key.StringValue != "" && value.StringValue != "")   // 空值不纳入
                {
                    dict.Add(key.StringValue, value.StringValue);
                }
            }
        }
    }
    wb.Dispose();
    // 返回dict
    return dict;
}
相关推荐
bin91533 小时前
【EXCEL数据处理】000010 案列 EXCEL文本型和常规型转换。使用的软件是微软的Excel操作的。处理数据的目的是让数据更直观的显示出来,方便查看。
大数据·数据库·信息可视化·数据挖掘·数据分析·excel·数据可视化
一个散步者的梦10 小时前
Excel常用函数
excel
bin915320 小时前
【EXCEL数据处理】000009 案列 EXCEL单元格数字格式。文本型数字格式和常规型数字格式的区别
大数据·前端·数据库·信息可视化·数据分析·excel·数据可视化
Eiceblue1 天前
Python保留数据删除Excel单元格的函数和公式
开发语言·python·excel
bin91531 天前
【EXCEL数据处理】000014 案例 EXCEL分类汇总、定位和创建组。附多个操作案例。
信息可视化·数据挖掘·数据分析·excel·数据可视化·数据图表·excel 数据分析
育种数据分析之放飞自我1 天前
GWAS分析中显著位点如何注释基因:excel???
linux·算法·excel
PowerBI学谦1 天前
Python in Excel 正式发布!
开发语言·python·excel
bin91531 天前
【EXCEL数据处理】000011 案列 EXCEL带有三角形图标的单元格转换,和文本日期格式转换。
大数据·数据库·信息可视化·数据挖掘·数据分析·excel·数据可视化
股票程序交易接口1 天前
股票接口api,如何用excel获得股票实时数据
excel·量化交易·股票api接口·股票量化接口·python股票接口·股票实时数据
zh路西法1 天前
【Matlab绘图】从Excel导入表格并进行三维绘图
开发语言·matlab·excel