У меня есть надстройка для книги Excel, которая запрограммирована в Visual Studio с помощью C #. Надстройка добавляет новую вкладку ленты вверху с некоторыми кнопками и элементами управления. Эта функция считывает данные с листа, проверяет, какие проекты на листе необходимо удалить, а затем должна удалять эти строки (сдвигая данные по мере их поступления).
Когда я пытаюсь использовать функцию удаления в любой форме, она просто возвращает «false» (что означает, что она не работает) и не удаляет / не изменяет данные.
В этом файле C # он помечается звездочкой, используя различные вещи, включая Interop.Excel
using System;
using System.Collections.Generic;
using System.Data;
using System.Data.SqlClient;
using System.Linq;
using ManpowerSheet.Data;
using Microsoft.Office.Interop.Excel;
using DataTable = System.Data.DataTable;
using System.Diagnostics;
Диапазон читается следующим образом
private static Range _rngData = Globals.ThisWorkbook.Names.Item("Local_Actuals").RefersToRange;
private static Range _rngTemplate = Globals.ThisWorkbook.Names.Item("Actuals_Template").RefersToRange;
private static int _rowsPerEntry = _rngTemplate.Rows.Count;
private static readonly Dictionary<string, int> _funcRows = new Dictionary<string, int>
Тогда функция удаления, которая не работает, выглядит следующим образом:
public static bool DeleteProject(int iRow)
{
var deleteSuccess = _rngData.Offset[iRow - 1].Resize[_rowsPerEntry].EntireRow.Delete(XlDirection.xlUp);
return deleteSuccess;
}
iRow - строка, в которой находится проект для удаления, например, строка 12.
_rowsPerEntry - количество удаляемых строк, например 6 строк
Я также пробовал различные комбинации удаления, ни одна из которых не работала.
Пробовал все следующее:
_rngData.Offset [iRow - 1] .Resize [_rowsPerEntry] .EntireRow.Delete (Type.Missing);
_rngData.Offset [iRow - 1] .Resize [_rowsPerEntry] .Delete (XlDeleteShiftDirection.xlShiftUp);
_rngData.Offset [iRow - 1] .EntireRow.Delete (XlDirection.xlUp);
_rngData.Offset [iRow - 1] .EntireRow.Delete (XlDeleteShiftDirection.xlShiftUp);
Что мне нужно изменить, чтобы это работало? Похоже, что та же функция может добавлять строки без проблем, поэтому не похоже, что это проблема с правами доступа или только для чтения, но я могу ошибаться.
Код, который работает для вставки строк, находится здесь:
private static void InsertBlankTemplates(int iRow, int numProjects)
{
// Insert blank rows
_rngData.Rows[iRow + ":" + (iRow + numProjects * _rowsPerEntry - 1)].EntireRow.Insert();
// Copy templates
for (var i = 0; i < numProjects; i++)
_rngTemplate.Copy(_rngData.Offset[iRow + i * _rowsPerEntry - 1].Resize[_rowsPerEntry]);
}