Другой формат чисел для буфера обмена?

У меня есть программа, которая отображает числа в виде System.Windows.Forms.DataGridView. Я форматирую эти числа в соответствии с региональными настройками пользователя, что вызывает проблемы при попытке скопировать и вставить указанные числа в Excel. Например, 123 456 789,00 — правильный локализованный формат для финского языка, но Excel интерпретирует его как строку, а не как число. Есть ли способ заставить Excel понимать разделители тысяч в числах или использовать другой числовой формат для буфера обмена?


person Hirvox    schedule 19.06.2010    source источник


Ответы (1)


Вы можете создать свой собственный класс, производный от DGV, и переопределить метод GetClipboardContent(). Это позволяет форматировать строку так, чтобы она была совместима с Excel. Что-то вроде этого:

using System;
using System.Windows.Forms;

class MyDGV : DataGridView {
    public override DataObject GetClipboardContent() {
        if (this.SelectedCells.Count == 1 && this.SelectedCells[0].ColumnIndex == 1) {
            string value = string.Format("{0:N2}", this.SelectedCells[0].Value);
            return new DataObject(DataFormats.Text, value);
        }
        return base.GetClipboardContent();
    }
}

Непроверенный.

person Hans Passant    schedule 19.06.2010