Диапазон удаления строки данных Excel всегда возвращает false и не может удалить строку - PullRequest
0 голосов
/ 09 января 2019

У меня есть надстройка для книги 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]);
        }
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...