Skip to content

公式与函数应用 ​

基础公式操作 ​

Excel公式是自动化处理的核心功能之一,MudTools.OfficeInterop.Excel提供了丰富的API来管理和操作Excel公式。

基本公式设置 ​

csharp
using System;
using MudTools.OfficeInterop;
using MudTools.OfficeInterop.Excel;

namespace BasicFormulaExample
{
    class Program
    {
        static void Main(string[] args)
        {
            Console.WriteLine("=== 基础公式操作示例 ===");
            
            try
            {
                // 算术运算公式
                ArithmeticFormulaDemo();
                
                // 统计函数公式
                StatisticalFormulaDemo();
                
                // 逻辑函数公式
                LogicalFormulaDemo();
                
                // 文本函数公式
                TextFormulaDemo();
                
                Console.WriteLine("\n✓ 基础公式示例完成");
            }
            catch (Exception ex)
            {
                Console.WriteLine($"✗ 基础公式示例时出错: {ex.Message}");
            }
        }
        
        static void ArithmeticFormulaDemo()
        {
            Console.WriteLine("\n1. 算术运算公式:");
            
            using var excelApp = ExcelFactory.BlankWorkbook();
            var workbook = excelApp.ActiveWorkbook;
            var worksheet = workbook.ActiveSheetWrap;
            
            worksheet.Name = "算术运算";
            
            // 设置基本数据
            worksheet.Cells[1, 1].Value = "数值A";
            worksheet.Cells[1, 2].Value = "数值B";
            worksheet.Cells[1, 3].Value = "运算结果";
            worksheet.Cells[1, 4].Value = "公式";
            
            // 测试数据
            var testData = new[]
            {
                new { A = 10, B = 5 },
                new { A = 25, B = 8 },
                new { A = 100, B = 3 },
                new { A = 7, B = 2 },
                new { A = 15, B = 4 }
            };
            
            int row = 2;
            foreach (var data in testData)
            {
                worksheet.Cells[row, 1].Value = data.A;
                worksheet.Cells[row, 2].Value = data.B;
                
                // 加法
                worksheet.Cells[row, 3].Formula = $"=A{row}+B{row}";
                worksheet.Cells[row, 4].Value = "加法";
                row++;
                
                // 减法
                worksheet.Cells[row, 3].Formula = $"=A{row-1}-B{row-1}";
                worksheet.Cells[row, 4].Value = "减法";
                row++;
                
                // 乘法
                worksheet.Cells[row, 3].Formula = $"=A{row-2}*B{row-2}";
                worksheet.Cells[row, 4].Value = "乘法";
                row++;
                
                // 除法
                worksheet.Cells[row, 3].Formula = $"=A{row-3}/B{row-3}";
                worksheet.Cells[row, 4].Value = "除法";
                row++;
                
                // 幂运算
                worksheet.Cells[row, 3].Formula = $"=A{row-4}^B{row-4}";
                worksheet.Cells[row, 4].Value = "幂运算";
                row++;
                
                // 求余
                worksheet.Cells[row, 3].Formula = $"=MOD(A{row-5},B{row-5})";
                worksheet.Cells[row, 4].Value = "求余";
                row++;
            }
            
            // 设置格式
            var headerRange = worksheet.Range("A1:D1");
            headerRange.Font.Bold = true;
            headerRange.Interior.Color = System.Drawing.Color.LightBlue;
            
            worksheet.Range("A2:A" + (row-1)).NumberFormat = "#,##0";
            worksheet.Range("B2:B" + (row-1)).NumberFormat = "#,##0";
            worksheet.Range("C2:C" + (row-1)).NumberFormat = "#,##0.00";
            
            worksheet.Columns["A:D"].AutoFit();
            
            workbook.SaveAs("ArithmeticFormulas.xlsx");
            Console.WriteLine("  ✓ 算术运算公式创建完成");
        }
        
        static void StatisticalFormulaDemo()
        {
            Console.WriteLine("\n2. 统计函数公式:");
            
            using var excelApp = ExcelFactory.BlankWorkbook();
            var workbook = excelApp.ActiveWorkbook;
            var worksheet = workbook.ActiveSheetWrap;
            
            worksheet.Name = "统计函数";
            
            // 生成随机测试数据
            var random = new Random();
            var data = new double[50];
            
            for (int i = 0; i < 50; i++)
            {
                data[i] = random.Next(100, 1000);
                worksheet.Cells[i + 1, 1].Value = data[i];
            }
            
            // 添加统计函数
            worksheet.Cells[52, 1].Value = "统计结果:";
            worksheet.Cells[52, 1].Font.Bold = true;
            
            worksheet.Cells[53, 1].Value = "平均值:";
            worksheet.Cells[53, 2].Formula = "=AVERAGE(A1:A50)";
            
            worksheet.Cells[54, 1].Value = "总和:";
            worksheet.Cells[54, 2].Formula = "=SUM(A1:A50)";
            
            worksheet.Cells[55, 1].Value = "最大值:";
            worksheet.Cells[55, 2].Formula = "=MAX(A1:A50)";
            
            worksheet.Cells[56, 1].Value = "最小值:";
            worksheet.Cells[56, 2].Formula = "=MIN(A1:A50)";
            
            worksheet.Cells[57, 1].Value = "中位数:";
            worksheet.Cells[57, 2].Formula = "=MEDIAN(A1:A50)";
            
            worksheet.Cells[58, 1].Value = "标准差:";
            worksheet.Cells[58, 2].Formula = "=STDEV.S(A1:A50)";
            
            worksheet.Cells[59, 1].Value = "方差:";
            worksheet.Cells[59, 2].Formula = "=VAR.S(A1:A50)";
            
            worksheet.Cells[60, 1].Value = "计数:";
            worksheet.Cells[60, 2].Formula = "=COUNT(A1:A50)";
            
            worksheet.Cells[61, 1].Value = "非空计数:";
            worksheet.Cells[61, 2].Formula = "=COUNTA(A1:A50)";
            
            // 设置格式
            worksheet.Range("A1:A50").NumberFormat = "#,##0";
            worksheet.Range("B53:B61").NumberFormat = "#,##0.00";
            
            var statHeader = worksheet.Range("A52:A52");
            statHeader.Font.Bold = true;
            statHeader.Font.Size = 12;
            
            var statLabels = worksheet.Range("A53:A61");
            statLabels.Font.Bold = true;
            
            var statValues = worksheet.Range("B53:B61");
            statValues.Interior.Color = System.Drawing.Color.LightGreen;
            
            worksheet.Columns["A:B"].AutoFit();
            
            workbook.SaveAs("StatisticalFormulas.xlsx");
            Console.WriteLine("  ✓ 统计函数公式创建完成");
        }
        
        static void LogicalFormulaDemo()
        {
            Console.WriteLine("\n3. 逻辑函数公式:");
            
            using var excelApp = ExcelFactory.BlankWorkbook();
            var workbook = excelApp.ActiveWorkbook;
            var worksheet = workbook.ActiveSheetWrap;
            
            worksheet.Name = "逻辑函数";
            
            // 设置测试数据
            worksheet.Cells[1, 1].Value = "条件A";
            worksheet.Cells[1, 2].Value = "条件B";
            worksheet.Cells[1, 3].Value = "逻辑结果";
            worksheet.Cells[1, 4].Value = "说明";
            
            var testCases = new[]
            {
                new { A = true, B = true, Description = "TRUE AND TRUE" },
                new { A = true, B = false, Description = "TRUE AND FALSE" },
                new { A = false, B = true, Description = "FALSE AND TRUE" },
                new { A = false, B = false, Description = "FALSE AND FALSE" }
            };
            
            int row = 2;
            foreach (var testCase in testCases)
            {
                worksheet.Cells[row, 1].Value = testCase.A;
                worksheet.Cells[row, 2].Value = testCase.B;
                
                // AND 函数
                worksheet.Cells[row, 3].Formula = $"=AND(A{row},B{row})";
                worksheet.Cells[row, 4].Value = $"AND: {testCase.Description}";
                row++;
                
                // OR 函数
                worksheet.Cells[row, 3].Formula = $"=OR(A{row-1},B{row-1})";
                worksheet.Cells[row, 4].Value = $"OR: {testCase.Description}";
                row++;
                
                // NOT 函数
                worksheet.Cells[row, 3].Formula = $"=NOT(A{row-2})";
                worksheet.Cells[row, 4].Value = $"NOT: {testCase.Description}";
                row++;
                
                // XOR 函数
                worksheet.Cells[row, 3].Formula = $"=XOR(A{row-3},B{row-3})";
                worksheet.Cells[row, 4].Value = $"XOR: {testCase.Description}";
                row++;
                
                // IF 函数
                worksheet.Cells[row, 3].Formula = $"=IF(A{row-4},\"条件A为真\",\"条件A为假\")";
                worksheet.Cells[row, 4].Value = $"IF: {testCase.Description}";
                row++;
            }
            
            // 复杂IF函数示例
            worksheet.Cells[row, 1].Value = "成绩";
            worksheet.Cells[row, 2].Value = "等级";
            worksheet.Cells[row, 3].Value = "公式";
            row++;
            
            var scores = new[] { 95, 85, 75, 65, 55, 45 };
            foreach (var score in scores)
            {
                worksheet.Cells[row, 1].Value = score;
                worksheet.Cells[row, 2].Formula = $"=IF(A{row}>=90,\"优秀\",IF(A{row}>=80,\"良好\",IF(A{row}>=70,\"中等\",IF(A{row}>=60,\"及格\",\"不及格\")))";
                worksheet.Cells[row, 3].Value = "嵌套IF函数";
                row++;
            }
            
            // 设置格式
            var headerRange = worksheet.Range("A1:D1");
            headerRange.Font.Bold = true;
            headerRange.Interior.Color = System.Drawing.Color.LightYellow;
            
            var scoreHeader = worksheet.Range($"A{row-6}:C{row-6}");
            scoreHeader.Font.Bold = true;
            scoreHeader.Interior.Color = System.Drawing.Color.LightCyan;
            
            worksheet.Columns["A:D"].AutoFit();
            
            workbook.SaveAs("LogicalFormulas.xlsx");
            Console.WriteLine("  ✓ 逻辑函数公式创建完成");
        }
        
        static void TextFormulaDemo()
        {
            Console.WriteLine("\n4. 文本函数公式:");
            
            using var excelApp = ExcelFactory.BlankWorkbook();
            var workbook = excelApp.ActiveWorkbook;
            var worksheet = workbook.ActiveSheetWrap;
            
            worksheet.Name = "文本函数";
            
            // 设置测试文本
            var testTexts = new[]
            {
                "Hello World",
                "excel automation",
                "123 Main Street",
                "中国北京",
                "2023-12-25",
                "Excel2021"
            };
            
            worksheet.Cells[1, 1].Value = "原始文本";
            worksheet.Cells[1, 2].Value = "函数类型";
            worksheet.Cells[1, 3].Value = "结果";
            worksheet.Cells[1, 4].Value = "公式";
            
            int row = 2;
            foreach (var text in testTexts)
            {
                worksheet.Cells[row, 1].Value = text;
                
                // LEN 函数
                worksheet.Cells[row, 3].Formula = $"=LEN(A{row})";
                worksheet.Cells[row, 2].Value = "长度";
                worksheet.Cells[row, 4].Value = $"=LEN(A{row})";
                row++;
                
                // UPPER 函数
                worksheet.Cells[row, 3].Formula = $"=UPPER(A{row-1})";
                worksheet.Cells[row, 2].Value = "大写";
                worksheet.Cells[row, 4].Value = $"=UPPER(A{row-1})";
                row++;
                
                // LOWER 函数
                worksheet.Cells[row, 3].Formula = $"=LOWER(A{row-2})";
                worksheet.Cells[row, 2].Value = "小写";
                worksheet.Cells[row, 4].Value = $"=LOWER(A{row-2})";
                row++;
                
                // PROPER 函数
                worksheet.Cells[row, 3].Formula = $"=PROPER(A{row-3})";
                worksheet.Cells[row, 2].Value = "首字母大写";
                worksheet.Cells[row, 4].Value = $"=PROPER(A{row-3})";
                row++;
                
                // LEFT 函数
                worksheet.Cells[row, 3].Formula = $"=LEFT(A{row-4},5)";
                worksheet.Cells[row, 2].Value = "左截取";
                worksheet.Cells[row, 4].Value = $"=LEFT(A{row-4},5)";
                row++;
                
                // RIGHT 函数
                worksheet.Cells[row, 3].Formula = $"=RIGHT(A{row-5},5)";
                worksheet.Cells[row, 2].Value = "右截取";
                worksheet.Cells[row, 4].Value = $"=RIGHT(A{row-5},5)";
                row++;
                
                // MID 函数
                worksheet.Cells[row, 3].Formula = $"=MID(A{row-6},3,4)";
                worksheet.Cells[row, 2].Value = "中间截取";
                worksheet.Cells[row, 4].Value = $"=MID(A{row-6},3,4)";
                row++;
                
                // FIND 函数
                worksheet.Cells[row, 3].Formula = $"=FIND(\"e\",A{row-7})";
                worksheet.Cells[row, 2].Value = "查找位置";
                worksheet.Cells[row, 4].Value = $"=FIND(\"e\",A{row-7})";
                row++;
                
                // SUBSTITUTE 函数
                worksheet.Cells[row, 3].Formula = $"=SUBSTITUTE(A{row-8},\"e\",\"E\")";
                worksheet.Cells[row, 2].Value = "替换";
                worksheet.Cells[row, 4].Value = $"=SUBSTITUTE(A{row-8},\"e\",\"E\")";
                row++;
                
                // TRIM 函数
                worksheet.Cells[row, 3].Formula = $"=TRIM(A{row-9})";
                worksheet.Cells[row, 2].Value = "去空格";
                worksheet.Cells[row, 4].Value = $"=TRIM(A{row-9})";
                row++;
                
                // 添加分隔行
                worksheet.Cells[row, 1].Value = "---";
                worksheet.Cells[row, 2].Value = "---";
                worksheet.Cells[row, 3].Value = "---";
                worksheet.Cells[row, 4].Value = "---";
                row++;
            }
            
            // 设置格式
            var headerRange = worksheet.Range("A1:D1");
            headerRange.Font.Bold = true;
            headerRange.Interior.Color = System.Drawing.Color.LightPink;
            
            worksheet.Columns["A:D"].AutoFit();
            
            workbook.SaveAs("TextFormulas.xlsx");
            Console.WriteLine("  ✓ 文本函数公式创建完成");
        }
    }
}

相关章节 ​