保留格式化长(> 15个字符)的数字

时间:2018-03-23 15:12:56

标签: excel vba excel-vba

尝试从其他Excel工作簿获取列

Sub Macro1()

    ActiveWorkbook.Queries.Add Name:="Sheet1", Formula:= _
        "let" & Chr(13) & "" & Chr(10) & "    Source = Excel.Workbook(File.Contents(""C:\Book1.xlsx""), null, true),"
    ActiveWorkbook.Worksheets.Add
    With ActiveSheet.ListObjects.Add(SourceType:=0, Source:= _
        "OLEDB;Provider=Microsoft.Mashup.OleDb.1;Data Source=$Workbook$;Location=Sheet1;Extended Properties=""""" _
        , Destination:=Range("$A$1")).QueryTable
        .CommandType = xlCmdSql
        .CommandText = Array("SELECT * FROM [Sheet1]")
        .RowNumbers = False
        .FillAdjacentFormulas = False
        .PreserveFormatting = True
        .RefreshOnFileOpen = False
        .BackgroundQuery = True
        .RefreshStyle = xlInsertDeleteCells
        .SavePassword = False
        .SaveData = True
        .AdjustColumnWidth = True
        .RefreshPeriod = 0
        .PreserveColumnInfo = True
        .Refresh BackgroundQuery:=False
    End With
End Sub
除了格式化之外什么都没问题? PreserveFormatting不能像存储为文本的源数字一样工作,而在目标中它们作为浮动数字。 Nothings不会更改格式,.ListObject.DataBodyRange.NumberFormat = "@"也不会ActiveSheets.Cells.NumberFormat = "@",格式正在更改,但格式为42342352 + 15e

那么如何从源头到目的地带来长号?

1 个答案:

答案 0 :(得分:1)

将数据作为文本处理 如果要将文件中的所有数据视为文本,请使用此文件,覆盖Excels列类型" General"猜测列中的数据类型。

Provider=Microsoft.ACE.OLEDB.12.0;Data Source=c:\myFolder\myExcel2007file.xlsx;
Extended Properties="Excel 12.0 Xml;HDR=YES;IMEX=1";

如果要将列标题读入结果集(使用HDR = NO,即使有标题)且列数据为数字,请使用IMEX = 1以避免崩溃。

始终使用IMEX = 1是检索混合数据列数据的更安全的方法。考虑一个Excel文件可能正常工作的情况,因为文件的数据导致驱动程序猜测一种数据类型,而另一个包含其他数据的文件导致驱动程序猜测另一种数据类型。这可能会导致您的应用崩溃。