在 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}";
    }
}
相关推荐
未来之窗软件服务6 天前
thinkphp 一个系统在同一个域名下,一个文件夹下如何区分多站点——穷人的精致规划——仙盟创梦IDE
服务器·网络·数据库·仙盟创梦ide·东方仙盟·东方仙盟精致规划
未来之窗软件服务8 天前
【免费】会员管理系统——-智能编程——仙盟创梦IDE
ide·会员系统·智能编程·仙盟创梦ide
未来之窗软件服务9 天前
JAVASCRIPT 前端数据库-V6--仙盟数据库架构-—-—仙盟创梦IDE
数据库·数据库架构·仙盟创梦ide·东方仙盟·东方仙盟数据库
未来之窗软件服务9 天前
JAVASCRIPT 前端数据库-V1--仙盟数据库架构-—-—仙盟创梦IDE
数据库·数据库架构·仙盟创梦ide·东方仙盟数据库
未来之窗软件服务13 天前
Excel表格批量下载 CyberWin Excel Doenlaoder 智能编程-——玄武芯辰
excel·批量下载·仙盟创梦ide·东方仙盟
未来之窗软件服务13 天前
工作自动化——工作自动提炼--智能编程——仙盟创梦IDE
运维·自动化·仙盟创梦ide·工作自动化
未来之窗软件服务15 天前
android 上位机调试软件-安卓串口 com ttl 调试——仙盟创梦IDE
android·ide·上位机·仙盟创梦ide
未来之窗软件服务15 天前
免费酒店管理系统+餐饮系统+小程序点餐——仙盟创梦IDE
小程序·酒店管理系统·仙盟创梦ide
未来之窗软件服务16 天前
Excel 批量下载PDF、批量下载考勤图片——仙盟创梦IDE
pdf·仙盟创梦ide·东方仙盟·仙盟大衍灵机
未来之窗软件服务18 天前
搭建 Select 三级联动架构-东方仙盟插件开发 JavaScript ——仙盟创梦IDE
开发语言·javascript·ide·仙盟创梦ide·东方仙盟皮肤·东方仙盟·东方仙盟插件