Диапазон постоянно терпит неудачу в сборе значений в C# с Interop ExcelC#

Место общения программистов C#
Ответить Пред. темаСлед. тема
Anonymous
 Диапазон постоянно терпит неудачу в сборе значений в C# с Interop Excel

Сообщение Anonymous »

Я относительно новичок в C#. Мой код постоянно не может вставлять значение в ячейку. Я был на этом уже несколько дней. Я пробовал почти все (как вы можете видеть в коде), но продолжаю получать неизвестные ошибки. < /P>
Обычно эта ошибка: < /p>
System.Runtime.InteropServices.COMException (0x800A03EC): 0x800A03EC
at System.RuntimeType.InvokeMember(String name, BindingFlags bindingFlags, Binder binder, Object target, Object[] providedArgs, ParameterModifier[] modifiers, CultureInfo culture, String[] namedParams)
at System.RuntimeType.ForwardCallToInvokeMember(String memberName, BindingFlags flags, Object target, Object[] aArgs, Boolean[] aArgsIsByRef, Int32[] aArgsWrapperTypes, Type[] aArgsTypes, Type retType)
at Microsoft.Office.Interop.Excel.Range.set__Default(Object RowIndex, Object ColumnIndex, Object )
< /code>
Я использую Interop Excel и пытаюсь вызовать функции в Excel с помощью Exceldna. По сути, я пытаюсь получить значения в диапазоне (["A1", "A100"]) из листа под названием prefill_sheet . Затем проберите каждую ячейку в диапазоне, получите его значение и передайте ее в API OpenAI для обработки. Эта часть работала до сих пор. Я попытался добавить ячейку значения по ячейке внутри петли, и она все еще дает мне ту же ошибку. Я пытался использовать диапазон , чтобы установить значение. Та же ошибка. Когда я использую range.set_value () , я получаю ошибку несоответствия типа.
код:
public static class AIPrefillSummarization{

[ExcelFunction(Description = "Summarize Prefill", Name = "SummarizePrefill")]
public static string Summarize_Prefill()
{
try
{
Application excelApp = Marshal2.GetActiveObject("Excel.Application") as Application;

Worksheet? prefill_sheet = excelApp.Sheets["Prefill"] as Worksheet;
Worksheet? summarySheet = excelApp.Sheets["Prefill Summary"] as Worksheet;
Worksheet? configSheet = excelApp.Sheets["Config"] as Worksheet;

if (prefill_sheet != null && configSheet != null && summarySheet != null)
{
String? apiKey = configSheet.Range["A1"].Value as String;
prefill_sheet.Visible = XlSheetVisibility.xlSheetVisible;
prefill_sheet.Unprotect();

Excel_Range prefillRange = prefill_sheet.Range["A1", "A100"];

if (apiKey == null || apiKey.Equals(""))
{
return "API Key not found in Config sheet A1!";
}

List summaries = new List();
for (int i = 0; i < prefillRange.Rows.Count; i++)
{
Excel_Range cell = (Excel_Range) prefillRange.Cells[i + 1, 1];
if (cell == null)
{
continue;
}
object cellValue = cell.Value;
string? value = cellValue?.ToString();
if (value == null || value == "")
{
summaries.Add("HELLO ALEX...");
continue;
}
else
{
//Console.WriteLine($"cell_value: {value}");
//summaries.Add(SendToChatGPT(value, apiKey));
summaries.Add("HELLO ALEX...");
}
}

Excel_Range allCells = summarySheet.Cells;
allCells?.ClearContents();

// Assuming 'summarySheet' is an Excel worksheet object and 'summaries' is a List
Excel_Range range = summarySheet.Range["A1"];
var summariesArray = summaries.ToArray();

range.ClearContents();
summarySheet.Activate();

// Create a two-dimensional array (1 column, N rows)
int startRow = 1;
object[,] outputArray = new object[summariesArray.Length, 1];
for (int i = 0; i < summariesArray.Length; i++)
{
//Excel_Range cell = (Excel_Range)summarySheet.Rows.Cells[startRow + i, 1];
try
{
outputArray[i, 0] = summariesArray;
//cell.Value = "Hello";
}
catch (Exception ex)
{
return $"Error writing to cell {startRow + i}, {1}: {ex}: range.Address: {range.Address}";
}
}

// Resize the range to match the number of items in summaries
range = range.Resize[summariesArray.Length, 1];
StringBuilder debugOutput = new StringBuilder();
for (int i = 0; i < summariesArray.Length; i++)
{
debugOutput.AppendLine($"Row {i + 1}: {outputArray[i, 0]}");
}

//return debugOutput.ToString();

// Assign the values to the Excel range
range.set_Value(outputArray);
//range.Value2 = outputArray;

}
return "Prefill summarized!";
}
catch (Exception ex)
{
return ex.ToString();
}
}


Подробнее здесь: https://stackoverflow.com/questions/794 ... erop-excel
Реклама
Ответить Пред. темаСлед. тема

Быстрый ответ

Изменение регистра текста: 
Смайлики
:) :( :oops: :roll: :wink: :muza: :clever: :sorry: :angel: :read: *x)
Ещё смайлики…
   
К этому ответу прикреплено по крайней мере одно вложение.

Если вы не хотите добавлять вложения, оставьте поля пустыми.

Максимально разрешённый размер вложения: 15 МБ.

  • Похожие темы
    Ответы
    Просмотры
    Последнее сообщение

Вернуться в «C#»