在 Excel xll 自动注册操作 中使用东方仙盟软件2————仙盟创梦IDE

复制代码
 // 获取当前工作表名称
        string sheetName = (string)XlCall.Excel(XlCall.xlfGetDocument, 7);
        
        // 构造动态名称(例如:Sheet1!MyNamedCell)
        string fullName = $"'{sheetName}'!MyNamedCell";
        
        // 获取引用并设置值
        var namedRange = (ExcelReference)XlCall.Excel(XlCall.xlfName, fullName);
        namedRange.SetValue($"来自 {sheetName} 的值");

设置表格A5

复制代码
 public static void SetRangeA5F10()
 {
     try
     {
         cl_日志.write_log("招标专家", "执行", "SetRangeA5F10");
         // 创建一个6行6列的数组(A到F共6列,5到10共6行)
         object[,] values = new object[6, 6];

         // 填充示例数据
         for (int row = 0; row < 6; row++)
         {
             for (int col = 0; col < 6; col++)
             {
                // values[row, col] = $"Row{row + 5}Col{col + 1}";
                string 字符串= $"Row{row + 5}Col{col + 1}";

                 var cell = new ExcelReference(row, col); // A1单元格

                 // 方法1:使用SetValue设置公式字符串(需以等号开头)
                 cell.SetValue(字符串);

             }
         }

         // 设置A1单元格的公式
      //   var cell = new ExcelReference(0, 0); // A1单元格

         // 方法1:使用SetValue设置公式字符串(需以等号开头)
       //  cell.SetValue("=SUM(B1:B10)");

         // 方法2:使用xlcFormula命令(更可靠)
        // XlCall.Excel(XlCall.xlcFormula, cell, "=AVERAGE(C1:C10)");

         // 获取Sheet1的索引
         int sheetId = 1; // Sheet1通常是第一个工作表

         // 设置区域的值
      //   object result = XlCall.Excel(
        //     XlCall.xlcSetValue,
        //     XlCall.Excel(XlCall.xlfR1C1ToA1, 5, 1, sheetId), // A5
       //      values
        // );
       //  XlCall.Excel()

       //  if (result is ExcelError && (ExcelError)result != ExcelError.ExcelErrorNull)
       //  {
             //  throw new System.Exception($"Excel操作失败: {result}");
        //     cl_日志.write_log("招标专家", "StartExpertSelection", ex.Message);
     //    }
     
     }
     catch (System.Exception ex)
     {
       //  System.Windows.Forms.MessageBox.Show($"发生错误: {ex.Message}", "错误",
           //  System.Windows.Forms.MessageBoxButtons.OK, System.Windows.Forms.MessageBoxIcon.Error);
         cl_日志.write_log("招标专家", "StartExpertSelection", ex.Message);
     }
 }

查找非空单元格

复制代码
using ExcelDna.Integration;

public static class RangeOperations
{
    [ExcelFunction(Description = "获取指定工作表的非空区域(通过公式)")]
    public static object GetNonEmptyRange(string sheetName = "Sheet1")
    {
        try
        {
            // 构建公式:获取工作表的已用区域地址
            string formula = $"=IFERROR(ADDRESS(1,1,4,,\"{sheetName}\")&\":\"&ADDRESS(MAX(IF({sheetName}!1:1048576<>"",ROW({sheetName}!1:1048576))),MAX(IF({sheetName}!1:1048576<>"",COLUMN({sheetName}!1:1048576)))),\"\")";
            
            // 计算公式
            string rangeAddress = (string)XlCall.Excel(XlCall.xlfEvaluate, formula);
            
            if (string.IsNullOrEmpty(rangeAddress))
            {
                return "错误: 未找到非空区域";
            }
            
            // 将地址转换为ExcelReference
            return new ExcelReference(rangeAddress);
        }
        catch (Exception ex)
        {
            return $"错误: {ex.Message}";
        }
    }
}

查找非空

复制代码
[ExcelFunction(Description = "手动查找指定工作表的非空区域")]
public static object FindNonEmptyRange(string sheetName = "Sheet1")
{
    try
    {
        // 获取工作表实例(通过COM对象,需引用Microsoft.Office.Interop.Excel)
        var excelApp = (Excel.Application)ExcelDnaUtil.Application;
        var worksheet = excelApp.Worksheets[sheetName];
        
        if (worksheet == null)
        {
            return $"错误: 找不到工作表 '{sheetName}'";
        }
        
        // 查找最后一行和最后一列
        Excel.Range lastRow = worksheet.Cells.Find(
            "*", 
            worksheet.Cells[1], 
            Excel.XlFindLookIn.xlValues, 
            Excel.XlLookAt.xlPart, 
            Excel.XlSearchOrder.xlByRows, 
            Excel.XlSearchDirection.xlPrevious
        );
        
        Excel.Range lastCol = worksheet.Cells.Find(
            "*", 
            worksheet.Cells[1], 
            Excel.XlFindLookIn.xlValues, 
            Excel.XlLookAt.xlPart, 
            Excel.XlSearchOrder.xlByColumns, 
            Excel.XlSearchDirection.xlPrevious
        );
        
        if (lastRow == null || lastCol == null)
        {
            return "错误: 未找到非空单元格";
        }
        
        // 构建区域地址
        string rangeAddress = $"{worksheet.Name}!{worksheet.Cells[1, 1].Address}:{lastRow.Address}{lastCol.Column}";
        
        // 释放COM对象(避免内存泄漏)
        System.Runtime.InteropServices.Marshal.ReleaseComObject(lastRow);
        System.Runtime.InteropServices.Marshal.ReleaseComObject(lastCol);
        System.Runtime.InteropServices.Marshal.ReleaseComObject(worksheet);
        
        return new ExcelReference(rangeAddress);
    }
    catch (Exception ex)
    {
        return $"错误: {ex.Message}";
    }
}
相关推荐
未来之窗软件服务1 天前
计算机等级考试—软考英语阅读理词汇—东方仙盟练气期
计算机软考·仙盟创梦ide·东方仙盟
未来之窗软件服务3 天前
未来之窗昭和仙君(六十五)Vue与跨地区多部门开发—东方仙盟练气
前端·javascript·vue.js·仙盟创梦ide·东方仙盟·昭和仙君
未来之窗软件服务3 天前
工作自动化(1)用户引导自动化教程开发——仙盟创梦IDE
运维·ide·自动化·仙盟创梦ide·东方仙盟
未来之窗软件服务6 天前
计算机等级考试—进程三态转换・KTV 收银—东方仙盟练气期
计算机软考·仙盟创梦ide·东方仙盟
未来之窗软件服务7 天前
自己平台接入国家网络身份认证公共服务接入
网络·仙盟创梦ide·东方仙盟
未来之窗软件服务8 天前
计算机等级考试—UML 核心标识符号对照表—东方仙盟练气期
计算机软考·仙盟创梦ide·东方仙盟
未来之窗软件服务8 天前
计算机等级考试—UML 核心图分类与图标对照表—东方仙盟练气期
uml·计算机软考·仙盟创梦ide·东方仙盟
未来之窗软件服务9 天前
商业应用(3)建材城商铺租赁管理系统—东方仙盟练气期
大数据·微服务·架构·商业应用·仙盟创梦ide·东方仙盟
未来之窗软件服务9 天前
计算机等级考试—后缀表达式(逆波兰式)KTV 消费算账—东方仙盟练气期
计算机软考·仙盟创梦ide·东方仙盟
未来之窗软件服务10 天前
服务器运维(二十六)终端安全证书管控与IIS 服务器—东方仙盟练气期
运维·服务器·安全·iis·仙盟创梦ide·东方仙盟