首页 > 解决方案 > 如何使用vb.net在excel单元格中粘贴以逗号分隔的十进制数字

问题描述

我想使用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

我使用剪贴板粘贴数据,但一直无法正确获取值大于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 工作表和手动粘贴工作正常。

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

标签: vb.netvb.net-2010

解决方案


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

objApp.UseSystemSeparators = true

或设置文化:

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

希望这有帮助


推荐阅读