在 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 天前
幽冥大陆(五十二)V10酒店门锁SDK TypeScript——东方仙盟筑基期
前端·javascript·typescript·酒店门锁·仙盟创梦ide·东方仙盟·东方仙盟sdk
未来之窗软件服务1 天前
浏览器开发CEF(二十一)C#浏览器 Promise模式调用——东方仙盟元婴期
前端·javascript·html·仙盟创梦ide·东方仙盟·东方仙盟vos智能浏览器
未来之窗软件服务2 天前
幽冥大陆(五十)屏幕录像手机教程3D透镜主题——东方仙盟炼气期
3d·仙盟创梦ide·东方仙盟·屏幕录像大师
未来之窗软件服务3 天前
幽冥大陆(四十九)PHP打造Java的Jar实践——东方仙盟筑基期
java·php·jar·仙盟创梦ide·东方仙盟·东方仙盟sdk·东方仙盟一体化
未来之窗软件服务3 天前
一体化系统(九)高级表格自己编程如何选择——东方仙盟练气期
大数据·人工智能·仙盟创梦ide·东方仙盟·东方仙盟sdk·东方仙盟一体化·万象exce
未来之窗软件服务4 天前
幽冥大陆(四十八)P50酒店门锁SDK 苹果object c语言仙盟插件——东方仙盟筑基期
c语言·开发语言·酒店门锁·仙盟创梦ide·东方仙盟·东方仙盟sdk
未来之窗软件服务5 天前
一体化系统(八)综合业态经营管理报表——东方仙盟练气期
仙盟创梦ide·东方仙盟·万象excel·东方仙盟一体化
未来之窗软件服务7 天前
幽冥大陆(四十六)人工智能自动化交互系统ASR2——东方仙盟筑基期
运维·自动化·仙盟创梦ide·东方仙盟·东方仙盟sdk·东方仙盟vos智能浏览器·东方仙盟自动化
未来之窗软件服务7 天前
幽冥大陆(四十五)人工智能自动化交互系统ASR——东方仙盟筑基期
运维·自动化·asr·仙盟创梦ide·东方仙盟·东方仙盟sdk·东方仙盟自动化
未来之窗软件服务9 天前
幽冥大陆(四十四)源码找回之Vue——东方仙盟筑基期
前端·javascript·vue.js·仙盟创梦ide·东方仙盟·源码提取·源码丢失