在 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}";
    }
}
相关推荐
未来之窗软件服务18 小时前
计算机等级考试—KTV 管理系统数据流图大题—东方仙盟练气期
数据库·计算机软考·仙盟创梦ide·东方仙盟
未来之窗软件服务1 天前
服务器运维(二十八)阿里云清理服务器瘦身降低漏洞风险—东方仙盟
linux·运维·服务器·仙盟创梦ide·东方仙盟
未来之窗软件服务3 天前
服务器运维(二十五)终端安全证书管控与Nginx HTTPS 部署—东方仙盟练气期
运维·服务器·安全·仙盟创梦ide·东方仙盟
未来之窗软件服务3 天前
未来之窗昭和仙君(六十四)可编程子窗口操作功能—东方仙盟练气期
仙盟创梦ide·东方仙盟·东方仙盟修仙·昭和仙君
未来之窗软件服务4 天前
数据库优化提速(四)数据库数据批量补齐—仙盟创梦IDE
数据库·数据库调优·仙盟创梦ide·东方仙盟
未来之窗软件服务5 天前
服务器运维(二十四) SSL数字证书管理续期—东方仙盟练气期
运维·服务器·ssl·仙盟创梦ide·东方仙盟
未来之窗软件服务5 天前
仙盟创梦IDE-集成开发测试:自动解析驱动的多线路自动化测试
前端·测试自动化·仙盟创梦ide·东方仙盟
未来之窗软件服务6 天前
幽冥大陆(一百10)PHP打造Java的Jar安全——东方仙盟筑基期
java·php·phar·仙盟创梦ide·东方仙盟
未来之窗软件服务7 天前
计算机等级考试—数据库完整性进销存—东方仙盟练气期
数据库·oracle·计算机软考·仙盟创梦ide·东方仙盟
未来之窗软件服务8 天前
幽冥大陆(一百07)—门禁局域网http获取名单—东方仙盟练气期
网络·http·仙盟创梦ide·东方仙盟·东方仙盟智能硬件·智能闸机