Существует проблема с этой формулой в сценариях Excel на C#

#c# #excel #excel-interop

#c# #excel #excel-interop

Вопрос:

Я использую Microsoft.Взаимодействие.Excel для сбора сводок из разных сценариев на определенном листе.

C # код:

 using System;
using System.Collections.Generic;
using System.Linq;
using System.Threading.Tasks;
using System.Windows.Forms;
using System.Runtime.InteropServices;

namespace Test_monte_carlo
{
    using Microsoft.Office.Core;
    using Excel = Microsoft.Office.Interop.Excel;
    static class Program
    {
    [STAThread]
    static void Main(string[] args)
    {
        string input_filename = args[0];
        string output_filename = args[1];
        int test_run = Int32.Parse(args[2]);

        Console.WriteLine(input_filename);

        double averageS = 0;

        for (int i = 0; i < test_run; i  )
        {
            Excel.Application app = new Excel.Application
            {
                Visible = true,
                DisplayAlerts = false 
            };

            Excel._Workbook workbook = app.Workbooks.Open(input_filename, UpdateLinks: 0, ReadOnly: false);
            workbook.Activate();
            Excel._Worksheet worksheet = workbook.Worksheets["Budget"];

            var watch = System.Diagnostics.Stopwatch.StartNew();
            Excel.Scenarios sn = worksheet.Scenarios();
            Console.WriteLine(sn.Count);

            string resultcells = "B6";
            sn.CreateSummary(Excel.XlSummaryReportType.xlStandardSummary, resultcells);
            watch.Stop();

            workbook.SaveAs(output_filename);

            var elapsedS = watch.ElapsedMilliseconds / 1000.0;
            averageS = averageS   elapsedS;

            workbook.Close(false, Type.Missing, Type.Missing);
            app.Quit(); 

            Marshal.ReleaseComObject(workbook);
            Marshal.ReleaseComObject(app);

            Console.WriteLine("Time "   i   ":"   elapsedS);
        }
        averageS = averageS / test_run;
        Console.WriteLine("Average time = "   averageS);
    }
} }
 

Я столкнулся с ошибкой при работе с образцом рабочей книги,

Необработанное исключение: System.Runtime.Службы взаимодействия.COMException: существует проблема с этой формулой. Не пытаетесь ввести формулу? Когда первый символ является знаком равенства («=») или минус («-«), Excel считает, что это формула: вы вводите: = 1 1, ячейка показывает: 2 Чтобы обойти это, сначала введите апостроф ( ‘ ): вы вводите: ‘=1 1, ячейка показывает: = 1 1 в System.RuntimeType .ForwardCallToInvokeMember(строковое имя члена, флаги BindingFlags, цель объекта, Int32[] aWrapperTypes, MessageDataamp; msgData) в Microsoft.Офис.Взаимодействие.Excel.Сценарии.CreateSummary(XlSummaryReportType ReportType, Object ResultCells) в Test_monte_carlo .Program.Main(строка [] аргументы) в C:UsersamdusersourcereposTest_monte_carloTest_monte_carloProgram.cs:line 51

Любая помощь здесь, пожалуйста. Настоящим я прикрепил ссылку, по которой я загрузил файл xlsx.

Ответ №1:

resultcells устанавливается в строковый тип, но должен быть диапазон.


Попробуйте заменить string resultcells = "B6"; на

 Excel.Range resultcells = worksheet.Range["B6:B6"];