#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"];