我正在將 excel 檔案一一匯入到 MS Access 資料庫中。我只想讀取某些行,那些包含資料的行,而不是包含嵌入元資料的空單元格的行。例如,我的 excel 檔案中的某些單元格顯示為空,但是當我突出顯示它們時,它們具有元資料,例如:=IF(K22<>"","hello-world",!Q45,"")
當我通過記錄集迭代行時,此元資料成為一個問題,它嘗試讀取該元資料但無法轉換它。
目前,我的代碼迭代了一個基于真實 excel 檔案的臨時表,然后將其匯入到 MS Access 資料庫中。我在后端有一個 vba,它通過記錄集迭代檔案,然后運行一些驗證,問題是它也在讀取這個元資料并且它不知道如何轉換它。當一切運行時,它會生成一個名為 的表table_name$_ImportErrors,其中包含一堆“型別轉換失敗”。
當我從原始 excel 中洗掉所有包含元資料的空行時,程式運行良好。但在最終版本中,我無法手動執行此操作。
有什么方法可以洗掉腳本中包含該元資料但不包含實際資料的行?
這是我嘗試的解決方案的代碼片段:
'code that imports the excel file
'then create a temp_table based on main excel
Set db = CurrentDb
Set rs = db.OpenRecordset("temp_table")
while not rs.EOF
if IsNull(rs.fields("a_null_field_in_same_row_as_meta_data").value) = False Then
'run data validations here
else:
rs.movenext
end if
wend
'add contents of temp_table into main table inside ms access
在這里,我試圖跳過包含完全空單元格的相同行上的元資料的行。第一個單元格為空的行也是該行后面包含元資料的行。
excel檔案如下所示:
field1, field2, field3, field4
------------------------------
sdfsdfs,sdfgsdg,sdgsdg,sdgsdgs
gfsdsfs,gdsgfsg,sdfsgsg,sdfsdf
, ,=IF(..),=IF(..)
, ,=IF(..),=IF(..)
謝謝
uj5u.com熱心網友回復:
由于DoCmd.TransferSpreadsheet給您一個不需要的*ImportErrors表,請考慮使用不同的方法來匯入電子表格資料。
您可以使用帶有適當連接字串的 Access 查詢來獲取電子表格資料。
這是我系統中的一個示例。它包括一個WHERE子句,用于排除第一列包含 Null 的行。
SELECT xl.*
FROM [Excel 12.0 Xml;HDR=YES;IMEX=2;ACCDB=YES;DATABASE=C:\Temp\Sample.xlsx].[Sheet1$] AS xl
WHERE xl.Field1 Is Not Null;
如果您在為您的情況構建正確的連接字串時遇到問題,您可以臨時創建一個指向電子表格的 Access 鏈接,然后檢查該鏈接的屬性。
? CurrentDb.TableDefs("Sheet1").Connect
Excel 12.0 Xml;HDR=YES;IMEX=2;ACCDB=YES;DATABASE=C:\Temp\Sample.xlsx
? CurrentDb.TableDefs("Sheet1").SourceTableName
Sheet1$
或者,如果您想永久保留電子表格鏈接,您的 Access 查詢可能會更簡單。
SELECT xl.*
FROM [link name here] AS xl
WHERE xl.Field1 Is Not Null;
無論哪種方式,一旦您有一個作業查詢,您可以將其用作 的源OpenRecordset,將其調整為SELECT ... INTO查詢以將其資料存盤到新表中,或者將其調整為INSERT查詢以將其資料存盤到現有表中。
轉載請註明出處,本文鏈接:https://www.uj5u.com/houduan/512500.html
標籤:擅长vba毫秒访问
上一篇:毛伊島可以在一條線上配置陰影嗎?
