Функция PasteSpecial без копирования даты - VSTO - PullRequest
1 голос
/ 25 октября 2019

Я работаю над надстройкой VSTO, где я пытаюсь скопировать значения одного листа на другой, но вставить только в виде текста. В Excel я могу вручную открыть новый лист, установить ячейки в текстовый формат и скопировать данные поверх. Я пытаюсь сделать это программно. Вот некоторый код:

    Worksheet currentSheet; // This is the sheet I'm copying from
    Excel.Range currentRange = currentSheet.Cells.Application.Selection.SpecialCells(
                                 Excel.XlCellType.xlCellTypeVisible,
                                 Type.Missing);

    Excel.Worksheet newWorksheet; // This is the sheet I'm copyng to
    newWorksheet.Cells.NumberFormat = "@"; // set the format of cells to text

    currentRange.Copy(); // Copy the data
    newWorksheet.Range["A1"].PasteSpecial(XlPasteType.xlPasteValues,
    XlPasteSpecialOperation.xlPasteSpecialOperationNone,
    System.Type.Missing,
    System.Type.Missing);

Это работает нормально, однако иногда данные, с которых я копирую, содержат даты (например, 2019-10-01), и когда я копирую их на новый листоно заканчивается как число, хотя я использую XlPasteType.xlPasteValues Я просто хочу, чтобы текстовое значение было перенесено в новую ячейку. Это возможно? Спасибо

1 Ответ

0 голосов
/ 25 октября 2019

Быстрый тест показывает, что PasteSpecial(XlPasteType.xlPasteValuesAndNumberFormats) сохраняет форматирование текста ячейки.

Или примените форматирование после вставки:

newWorksheet.Range["A1"].PasteSpecial(XlPasteType.xlPasteValues,
  XlPasteSpecialOperation.xlPasteSpecialOperationNone,
  System.Type.Missing,
  System.Type.Missing);
newWorksheet.Cells.NumberFormat = "@"; 

FWIW Я не вижу, чтобы форматирование даты явно превратилось в форматирование чисел. Я вижу форматирование ячейки, примененное уже к целевой ячейке. В моем случае это было "общее".

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