-1

我有一个数据库,其中包含超过 4,000,000 个术中温度读数 (4354499 x 8)。因此,数据库太大而无法复制和粘贴。

变量:

caseID - 手术病例的唯一标识符。如果一名患者在不同的日子进行多次手术,则每次手术都会有不同的 caseID

温度- 温度值

time - 记录温度的时间

在整个手术过程中,每 15 秒测量一次温度读数,因此温度读数超过 500 个的病例是常态。每个手术病例都有自己的唯一标识符 (caseID),但所有 500 个读数的 caseID 都是相同的。

我需要的是一种自动提取每种情况下的温度读数的方法。它可以是以下任何一种格式:

  • 1 个包含多个工作表的 Excel 工作簿,每个工作表包含与一个 caseID 相关的所有温度读数。如果 Excel 限制工作簿中的工作表数量,这可能不起作用。
  • 许多 Excel 工作簿,每个都包含一个 caseID 的温度读数(可能是首选,因为我不介意拥有大量文件)
4

1 回答 1

1

在其最基本的形式中,您正在寻找的是一些像这样的 VBA 代码:

Public Function DumpTempsByCaseToExcel() As Boolean
Dim cdb As DAO.Database, rst As DAO.Recordset, qdf As DAO.QueryDef

Const OutPath = "C:\Users\Gord\Desktop\"
Const DataTableName = "Temperatures"
Const TempQueryDefName = "zzzTempQuery"

Set cdb = CurrentDb
Set rst = cdb.OpenRecordset("SELECT DISTINCT caseID FROM [" & DataTableName & "]", dbOpenSnapshot)
Do While Not rst.EOF
    On Error Resume Next
    cdb.QueryDefs.Delete TempQueryDefName
    On Error GoTo DumpTempsByCaseToExcel_Error
    Set qdf = cdb.CreateQueryDef(TempQueryDefName, "SELECT * FROM [" & DataTableName & "] WHERE caseID=""" & rst!caseID & """")
    Set qdf = Nothing
    DoCmd.TransferSpreadsheet acExport, acSpreadsheetTypeExcel12Xml, TempQueryDefName, OutPath & rst!caseID & ".xlsx"
    rst.MoveNext
Loop
rst.Close
Set rst = Nothing
Set cdb = Nothing
DumpTempsByCaseToExcel = True
Exit Function

DumpTempsByCaseToExcel_Error:
MsgBox Err.Description, vbCritical, "Runtime error " & Err.Number
DumpTempsByCaseToExcel = False
End Function

假设:

  • 您的 [caseID] 值是字母数字。如果它们是数字,那么您将不得不摆弄构建 WHERE 子句的代码中的引号。

  • 您的 [caseID] 值可用作有效的 Windows 文件名。如果它们包含在 Windows 文件名中无效的字符,那么您必须使用类似Replace()函数的东西来删除它们或将它们映射到其他东西。

  • 您的目标文件夹是空的,或者至少不包含与您将创建的文件同名的文件。编写的示例代码可能会覆盖现有文件。

于 2013-03-29T14:18:02.423 回答