как вставить число в десятичном виде через запятую в ячейке Excel с помощью vb.net - PullRequest
0 голосов
/ 26 февраля 2019

Я хочу скопировать таблицу в Excel, используя Microsoft.Office.Interop.Excel. Мой Excel на испанском языке с "," в качестве десятичного разделителя

Код:

Dim nSheet as integer = 1
Dim measureFile As String, measureFileText As String
Dim measureFilesPath as string = "E:\Test\"

objApp = New Microsoft.Office.Interop.Excel.Application
objBook = objApp.Workbooks.Open(_myFileName)
//'objApp.Visible = True
objSheets = objBook.Worksheets

objSheets(nSheet).activate()
objSheets(nSheet).Range("E1:E211").NumberFormat = "0,000"
objSheets(nSheet).Range("A1").Select()

measureFile = measureFilesPath & "test.txt"
measureFileText = My.Computer.FileSystem.ReadAllText(measureFile, System.Text.Encoding.UTF8)

//' Clear and copy a measureFileText to clipboard
Clipboard.Clear()
Clipboard.SetText(measureFileText)

Thread.Sleep(500)

//'Paste the measureFileText to sheet
objSheets(nSheet).Paste()

Данные моей таблицы находятся в файле test.txt как этот

Данные

840 8754    834 3,66    0,965   0,31
850 8864    849 3,82    0,979   0,32
860 8974    856 3,89    0,984   0,33
870 9084    864 3,97    0,999   0,33
880 9195    879 4,12    1,018   0,34
890 9305    886 4,21    1,023   0,35
900 9415    893 4,3 1,038   0,36
910 9525    908 4,47    1,048   0,37

Я использую буфер обмена для вставки данных, но мне не удалось правильно получить ячейку со значениями больше 1000.

850 8864    849 3,82    0,979   0,32
860 8974    856 3,89    0,984   0,33
870 9084    864 3,97    0,999   0,33
880 9195    879 4,12    1018,000    0,34
890 9305    886 4,21    1023,000    0,35
900 9415    893 4,3     1038,000    0,36
910 9525    908 4,47    1048,000    0,37

или эту

850 8864    849 3,82    0,979   0,32
860 8974    856 3,89    0,984   0,33
870 9084    864 3,97    0,999   0,33
880 9195    879 4,12    1.018   0,34
890 9305    886 4,21    1.023   0,35
900 9415    893 4,3     1.038   0,36
910 9525    908 4,47    1.048   0,37

ЕслиЯ открываю новую книгу в Excel и вставляю скопированную таблицу из файла .txt, она работает нормально.

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

Может кто-нибудь дать мне идею, чтобы решить эту проблему?

Ответы [ 3 ]

0 голосов
/ 27 февраля 2019

Вы можете попробовать быстрый обходной путь, например, замените запятые точками перед вставкой:

measureFileText = measureFileText.Replace(",", ".")

Ваш подход в целом имеет недостаток в том, что вы позволяете Excel решать, как разбивать столбцы, как преобразовывать числа идаже где на листе, чтобы вставить результаты.Эти настройки могут измениться при следующем открытии Excel.

Я бы сам проанализировал данные и сначала сохранил их в массиве

Dim strLines() As String = measureFileText.Replace(Chr(13), "").Split(Chr(10))  
Dim nLines as Integer = strLines.Length()
Dim nColumns as Integer = strLines(0).Split({" "}, StringSplitOptions.RemoveEmptyEntries ).Length()
Dim Arr(,) as Object
Redim arr(nLines, nColumns)

For iLine as Integer =  0 to nLines - 1
    Dim Line as String = strLines(iLine)
    Dim Columns() as String =  Line.Split({" "}, StringSplitOptions.RemoveEmptyEntries )

    for iColumn as Integer = 0 to nColumns - 1 
         dim T as String = Columns(iColumn)
         dim N as Double = Double.Parse(T, CultureInfo.GetCultureInfo("es-ES"))
         Arr(iLine, iColumn) = N
    next
next

, а затем поместил их в Excel

objSheets(nSheet).Range("A1").Resize(Arr.GetUpperBound(0) + 1, Arr.GetUpperBound(1) + 1).Value = Arr
0 голосов
/ 01 марта 2019

Спасибо, господа за помощь.Работает, когда я только что использовал первое предложение gsimo83, добавив

objApp.UseSystemSeparators = true
0 голосов
/ 27 февраля 2019

Извините, у меня нет репутации, чтобы комментировать, и я не уверен, что это ответ, но вы можете попытаться принудительно использовать SystemSeparator (если культура системы в es / ES):

objApp.UseSystemSeparators = true

или установите культуру:

Dim ci As CultureInfo = New CultureInfo("es-ES")
objApp.DecimalSeparator = ci.NumberFormat.NumberDecimalSeparator
objApp.ThousandsSeparator = ci.NumberFormat.NumberGroupSeparator

надеюсь, эта помощь

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