如何使用vb.net粘贴excel单元格中用逗号分隔的十进制数字

问题描述 投票:0回答:3

我想使用Microsoft.Office.Interop.Excel复制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

我使用剪贴板粘贴数据,但我无法正确获取值大于1,000的单元格。

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工作表和手动粘贴工作正常。

有人可以给我一个想法来解决这个问题吗?

vb.net vb.net-2010
3个回答
0
投票

抱歉,我没有足够的声誉来评论,我不确定这是一个答案,但你可以尝试强制使用系统分隔符(如果系统文化在es / ES中):

objApp.UseSystemSeparators = true

或者设定文化:

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

希望这个帮助


0
投票

您可以尝试快速解决方法,例如在粘贴之前用点替换逗号:

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
投票

谢谢先生们的帮助。当我刚使用第一个gsimo83建议添加时工作

objApp.UseSystemSeparators = true
© www.soinside.com 2019 - 2024. All rights reserved.