在VS中用C#写用于EXCEL的VSTO外接程序,为什么如下代码targetArray[i, j]报错[]内的索引数量错误,应为1。 ExcelAPP.Worksheets.Add(After: ExcelAPP.ActiveSheet); ExcelAPP.ActiveSheet.Name = "结果"; Excel.Workbook workbook = Globals.ThisAddIn.Application.ActiveWorkbook; Excel.Worksheet worksheet = (Excel.Worksheet)workbook.Sheets["结果"]; int lieCount = targetArray.GetLength(0); int colCount = targetArray.GetLength(1); for (int i = 0; i < lieCount; i++) { for (int j = 0; j < colCount; j++) { worksheet.Cells[i + 1, j + 1] = targetArray[i, j]; } }
时间: 2024-02-14 07:09:34 浏览: 110
根据您提供的代码,出现错误的原因是 `targetArray[i, j]` 的索引数量错误。这是因为,`targetArray` 数组的索引数量应该与其维度数量相同。
您可以通过调试或者输出语句来确定 `targetArray` 数组的维度,然后在循环遍历时使用正确的索引数量。例如,如果 `targetArray` 是一个二维数组,应该使用 `targetArray[i, j]` 来访问其元素。
同时,您也可以在循环之前将 `lieCount` 和 `colCount` 输出一下,确保其值正确。如果 `targetArray` 数组的维度与 `lieCount` 和 `colCount` 不匹配,也会导致类似的索引错误。
另外,建议在循环之前进行一次 `null` 判断,以确保 `worksheet` 不为空。例如:
```
if (worksheet != null)
{
for (int i = 0; i < lieCount; i++)
{
for (int j = 0; j < colCount; j++)
{
worksheet.Cells[i + 1, j + 1] = targetArray[i, j];
}
}
}
```
相关问题
excel vsto外接程序
Excel VSTO外接程序是一种基于Visual Studio Tools for Office(VSTO)的Excel插件,可以通过编写C#或VB.NET代码来扩展Excel的功能。下面是一个简单的例子:
1.新建一个Excel的外接程序
打开Visual Studio 2017,选择【文件】→【新建】→【项目】,在左侧选择【Office/SharePoint】,在右侧选择【Excel 2013和2016 VSTO 外接程序】,然后单击【确定】。
2.完成Excel外接程序的第一个功能
在ThisAddIn.cs文件中,声明一个公有的Excel应用程序对象变量:
```csharp
public Excel.Application ExceApp;
```
然后在ThisAddIn_Startup方法中,将ExceApp对象设置为当前Excel应用程序对象:
```csharp
private void ThisAddIn_Startup(object sender, System.EventArgs e)
{
ExceApp = this.Application;
}
```
最后,在ThisAddIn_Startup方法中,将当前Excel的活动单元格的值设置为"VSTO":
```csharp
private void ThisAddIn_Startup(object sender, System.EventArgs e)
{
ExceApp = this.Application;
ExceApp.ActiveCell.Value2 = "VSTO";
}
```
关于VSTO外接程序代码,如何写代码在程序最后关闭com对象程序,而不关闭Excel
在 VSTO 外接程序中,可以通过使用 try-finally 块来确保在代码执行完毕后关闭 com 对象程序并保持 Excel 应用程序打开。
以下是示例代码:
```csharp
using Microsoft.Office.Interop.Excel;
public void CloseComObject()
{
Application excelApplication = new Application();
Workbook workbook = null;
Worksheet worksheet = null;
try
{
// 打开工作簿和工作表
workbook = excelApplication.Workbooks.Open("C:\\Test.xlsx");
worksheet = workbook.Worksheets[1];
// 在此处编写处理 Excel 工作簿的代码
// 关闭工作簿和工作表
workbook.Close(false);
worksheet = null;
// 退出 Excel 应用程序
excelApplication.Quit();
}
finally
{
// 释放 com 对象
if (worksheet != null)
{
System.Runtime.InteropServices.Marshal.ReleaseComObject(worksheet);
worksheet = null;
}
if (workbook != null)
{
System.Runtime.InteropServices.Marshal.ReleaseComObject(workbook);
workbook = null;
}
if (excelApplication != null)
{
System.Runtime.InteropServices.Marshal.ReleaseComObject(excelApplication);
excelApplication = null;
}
// 强制回收垃圾
GC.Collect();
GC.WaitForPendingFinalizers();
}
}
```
在以上代码中,我们通过在 try-finally 块中处理 com 对象,以确保在代码执行完毕后关闭 com 对象程序并保持 Excel 应用程序打开。最后,我们使用 System.Runtime.InteropServices.Marshal.ReleaseComObject() 方法释放 com 对象,然后强制回收垃圾以确保释放内存。
阅读全文