Как правильно настроить автозаполнение для Excel? - PullRequest
0 голосов
/ 12 марта 2020

Обновление : я пытался использовать другие Excel.XlAutoFillType , к сожалению, это не сработало.

Типы ( здесь )

ОРИГИНАЛЬНЫЙ ВОПРОС:

Я новичок в VSTO и сейчас пишу VSTO надстройка для Excel (версия 2013 или выше). Метод автозаполнения: Range.AutoFill (Range, XlAutoFillType) из Microsoft.Office.Interop.Excel (См. Документация из MS ).

У меня есть дата (например, 25.02.2020), и я хочу, чтобы Excel заполнял оставшуюся часть столбца датами после нее (например, A1: 25.02.2020; A2: 26.02.2020; A3: 27.02.2020; .. . A6: 01.03.2020; ...).

Когда я пытался вручную сделать это в Excel, он работал , пока я выбирал два или больше клеток в качестве примеров.

Изображение см .: https://i.imgur.com/L8Enqrr.png (поскольку StackOverflow не позволяет мне публиковать фотографии)

Однако, когда я пытался использовать автозаполнение метод, он потерпел неудачу и добавил только годы. (B2 предоставлен в качестве примера для Excel)

изображение см .: https://i.imgur.com/smWpo0Y.png

Вот мой код:

// Datetime dates[] = new dates[3] {dt1, dt2, dt3}
// Int[] dateLength = new Int[3] {0, (int)Math.Ceiling(dates[1].Subtract(dates[0]).TotalDays), ((int)Math.Ceiling(dates[2].Subtract(dates[1]).TotalDays) + (int)Math.Ceiling(dates[1].Subtract(dates[0]).TotalDays))}

for (int i = 0, j = 0; i < dates.Length; i++, j++)
    {
    Excel.Worksheet activeWst = Globals.ThisAddIn.Application.ActiveSheet;
    Excel.Range tRange = activeWst.Range[activeWst.Cells[dateLength[i] + 2 + j, 2], activeWst.Cells[dateLength[i] + 2 + j, 2]];
    tRange.Value = dates[i].ToString("dd/MM/yyyy");
    if (i < dates.Length - 1) {
        tRange.AutoFill(activeWst.Range[activeWst.Cells[dateLength[i] + 2 + j, 2], activeWst.Cells[dateLength[i + 1] + j + 1, 2]]);
    }
}

Спасибо.

1 Ответ

0 голосов
/ 13 марта 2020

Я нашел ответ сам. Поскольку значение даты в каждой ячейке хранится как String , Автозаполнение не будет работать.

tRange.Value = dates[i].ToString("dd/MM/yyyy");  //The problem

Единственное, что нужно записать даты в ячеек и измените числовой формат всего столбца на тот, который вам нравится.

//Fixed code    
tRange.EntireColumn.NumberFormat = "dd-MM-yyyy";
tRange.Value = dates[i].Date;

И кстати, он работает со стандартным XlAutoFillType ( Excel.XlAutoFillType.xlFillDefault ).

tRange.AutoFill(activeWst.Range[activeWst.Cells[dateLength[i] + 2 + j, 2], activeWst.Cells[dateLength[i + 1] + j + 1, 2]], Excel.XlAutoFillType.xlFillDefault);

Я ценю помощь каждого. Большое спасибо.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...