尝试从其他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
那么如何从源头到目的地带来长号?
答案 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文件可能正常工作的情况,因为文件的数据导致驱动程序猜测一种数据类型,而另一个包含其他数据的文件导致驱动程序猜测另一种数据类型。这可能会导致您的应用崩溃。