使用DoCmd.TransferText命令将表导出到.csv时,如何保留必要的小数位?

如何解决使用DoCmd.TransferText命令将表导出到.csv时,如何保留必要的小数位?

| 我在MS-Access-2010 VBA中使用DoCmd.TransferText将表导出到.csv文件。但是,当我这样做时,生成的.csv文件会截断表中的信息。例如,经度-85.350223变为-85.35。如何在生成的.csv文件仍用逗号分隔并保留表格中的全部信息的位置进行设置? 如果我需要创建导入/导出规范并使用DoCmd.TransferText的SpecificationName功能在命令行中引用它(假设我已正确将此功能解释为格式工具),请说明如何执行此操作。 这是我当前用于将文件导出到.csv的行:   DoCmd.TransferText acExportDelim,   \“ AllMetersAvgRSSI \”,   CurrentProject.Path和   \“ \\ AllMetersAvgRSSI.csv \”     

解决方法

        我建议您使用从eraserve获得的此功能: 这是您使用/调用它的方式:
Call ExportToCSV(\"AllMetersAvgRSSI\",_
                  CurrentProject.Path & \"\\AllMetersAvgRssi.csv\")  
这是函数:
Public Function ExportToCSV(TableName As String,_ 
      strFile As String,_ 
      Optional tfQualifier As Boolean,_ 
      Optional strDelimiter As String = \",\",_ 
      Optional FieldNames As Boolean ) As Byte

   \'References: Microsoft Access 11.0 Object Library,Microsoft DAO 3.6 Object Library 
   \'Set references by Clicking Tools and Then References in the Code View window 
   \' 
   \' Exports a table to a text file. 
   \' Accepts 
   \' Tablename: Name of the Target Table 
   \' strFile: Path and Filename to Export the table to 
   \' tfQualifier: True or False 
   \'strDelimiter: String Value defaults to comma:,\' FieldNames: True or False 
   \' 
   \'USAGE: ExportToCSV TableName,strFile,True,True 
   On Error GoTo errhandler  

   Dim intOpenFile As Integer,x As Integer 
   Dim strSQL As String,strCSV As String,strPrint As String,strQualifier As String 

   \'Close any open files,not that we expect any 
   Reset 

   \'Grab Next Free File Number 
   intOpenFile = FreeFile 

   \'OPen our file for work 
   Open strFile For Output Access Write As # intOpenFile 

   \'Write the contents of the table to the file 
   \'Open the source 
   strSQL = \"SELECT * FROM \" & TableName & \" As \" & TableName 

   \'set the qualifer 
   strQualifier = Chr( 34 ) 

   With CurrentDb.OpenRecordset(strSQL,dbOpenSnapshot) 

      \'Check if we need Field Names 
      If FieldNames = True Then 

         For x = 0 To .Fields.Count - 1 
            If tfQualifier = True Then 
               \'Write the Field Names as needed 
               \'The Qualifier is strQualifier or Quote 
               strCSV = strCSV & strQualifier & strDelimiter & strQualifier & _ 
                     .Fields(x).Name 

               \'Add last strQualifier 
               If x = .Fields.Count - 1 Then 
                  strCSV = strCSV & strQualifier 
               End If 
            Else 
               \'Write the Field Names as needed 
               \'No Qualifier 
               strCSV = strCSV & strDelimiter & .Fields(x).Name 

            End If 
         Next x 
         \'Write to File 
         strPrint = Mid(strCSV,Len(strDelimiter) + 2 ) 
         Print # intOpenFile,strPrint 
      End If 

      \'Write the CSV 
      Do Until .EOF 
         strCSV = \"\" 
         For x = 0 To .Fields.Count - 1 

            \'Check for Qualifier 
            If tfQualifier = True Then 
               \'The Qualifier is strQualifier or Quote 
               strCSV = strCSV & strQualifier & strDelimiter & strQualifier & _ 
                     Nz(.Fields(x),vbNullString)  

               \'Add last strQualifier 
               If x = .Fields.Count - 1 Then 
                  strCSV = strCSV & strQualifier 
               End If 
            Else 
               \'No Qualifier 
               strCSV = strCSV & strDelimiter & Nz(.Fields(x),vbNullString) 

            End If 
         Next x 

         \'Eliminate Back to back strQualifiers or Qualifiers if changed 
         strCSV = Replace(strCSV,strQualifier & strQualifier,\"\" ) 

         strPrint = Mid(strCSV,strPrint 
         .MoveNext 
      Loop 

   End With 

ExitHere: 
   \'Close the file 
   Close # intOpenFile 

   Exit Function 

errhandler: 
   With Err 
      MsgBox \"Error \" & .Number & vbCrLf & .Description,_ 
            vbOKOnly Or vbCritical,\"ExportToCSV\" 
   End With 

   Resume ExitHere 
End Function 
通过将有问题的字段更改为文本字段,或在执行导出操作之前将它们简单地复制到某些临时文本字段中,也可能会获得成功。     ,        谢谢@ HK1发布此代码。我做了一些修改: 修复了@Bryan指出的错误 更改了导出,以便仅“文本”和“备注”字段数据被限定符包围(通常不将数字和日期值视为文本)。 将限定符参数更改为字符串,以便可以使用自定义文本限定符(例如,单引号而不是双引号) 由于函数未返回任何值,因此将过程更改为Sub。 注意:这可用于导出表或查询(选择或交叉表)。 调用方式(假设文本定界符使用双引号):
Call ExportToCSV(\"AllMetersAvgRSSI\",_
                  CurrentProject.Path & \"\\AllMetersAvgRssi.csv\",Chr$(34)) 
这是功能:
    Public Sub ExportToCSV(TableName As String,_
          strFile As String,_
          Optional strQualifier As String = vbNullString,_
          Optional strDelimiter As String = \",_
          Optional FieldNames As Boolean = False)

    \'References: Microsoft Access 11.0 Object Library,Microsoft DAO 3.6 Object Library
    \'Set references by Clicking Tools and Then References in the Code View window
    \'
    \' Exports a table to a text file.
    \' Accepts
    \' Tablename: Name of the Target Table or Query
    \' strFile: Path and Filename to Export the table to
    \' strQualifier: specifies text qualifier (typically a double-quote)
    \' strDelimiter: String Value defaults to comma:,\' FieldNames: True or False
    \'
    \'USAGE: ExportToCSV TableName,Chr$(34),True
    On Error GoTo errhandler

    Dim intOpenFile As Integer
    Dim strSQL As String,strCSV As String
    Dim fld As DAO.Field

    \'Close any open files,not that we expect any
    Reset

    \'Grab Next Free File Number
    intOpenFile = FreeFile

    \'Open our file for work
    Open strFile For Output Access Write As #intOpenFile

    \'Write the contents of the table to the file
    \'Open the source
    strSQL = \"SELECT * FROM \" & TableName

    With CurrentDb.OpenRecordset(strSQL,dbOpenSnapshot)

      \'Check if we need Field Names
      If FieldNames Then
        For Each fld In .Fields
          strCSV = strCSV & strDelimiter & strQualifier & fld.Name & strQualifier
        Next fld
        \' remove leading delimiter
        strCSV = Mid$(strCSV,Len(strDelimiter) + 1)
        \'Write to File
        Print #intOpenFile,strCSV
      End If

      \'Write records to the CSV
      Do Until .EOF
        strCSV = \"\"
        For Each fld In .Fields
          If fld.Type = dbText Or fld.Type = dbMemo Then
            strCSV = strCSV & strDelimiter & strQualifier & fld.Value & strQualifier
          Else
            strCSV = strCSV & strDelimiter & fld.Value
          End If
        Next fld
        \' remove leading delimiter
        strCSV = Mid$(strCSV,Len(strDelimiter) + 1)
        \'Eliminate Back to back strQualifiers
        If Len(strQualifier) > 0 Then
          strCSV = Replace(strCSV,\"\")
        End If
        \'Write to File
        Print #intOpenFile,strCSV
        .MoveNext
      Loop

      .Close
    End With

    ExitHere:
      \'Close the file
      Close #intOpenFile

      Exit Sub

    errhandler:
      With Err
         MsgBox \"Error \" & .Number & vbCrLf & .Description,_
           vbOKOnly Or vbCritical,\"ExportToCSV\"
      End With

      Resume ExitHere
    End Sub
    ,        伟大的代码大家。它运作良好且快速。我添加了一行,以处理传入的表名包含空格的情况。
Tablename = IIf(Left(Tablename,1) = \"[\",Tablename,\"[\" & Tablename & \"]\")
整个过程的我的版本(有一个更改):
   Public Sub ExportToCSV(Tablename As String,_
      strFile As String,_
      Optional strQualifier As String = vbNullString,_
      Optional strDelimiter As String = \",_
      Optional FieldNames As Boolean = False)

\'References: Microsoft Access 11.0 Object Library,Microsoft DAO 3.6 Object Library
\'Set references by Clicking Tools and Then References in the Code View window
\'
\' Exports a table to a text file.
\' Accepts
\' Tablename: Name of the Target Table or Query
\' strFile: Path and Filename to Export the table to
\' strQualifier: specifies text qualifier (typically a double-quote)
\' strDelimiter: String Value defaults to comma:,\' FieldNames: True or False
\'
\'USAGE: ExportToCSV TableName,True
On Error GoTo errhandler

Dim intOpenFile As Integer
Dim strSQL As String,strCSV As String
Dim fld As DAO.Field

Tablename = IIf(Left(Tablename,\"[\" & Tablename & \"]\")

\'Close any open files,not that we expect any
Reset

\'Grab Next Free File Number
intOpenFile = FreeFile

\'Open our file for work
Open strFile For Output Access Write As #intOpenFile

\'Write the contents of the table to the file
\'Open the source
strSQL = \"SELECT * FROM \" & Tablename

With CurrentDb.OpenRecordset(strSQL,dbOpenSnapshot)

  \'Check if we need Field Names
  If FieldNames Then
    For Each fld In .Fields
      strCSV = strCSV & strDelimiter & strQualifier & fld.Name & strQualifier
    Next fld
    \' remove leading delimiter
    strCSV = Mid$(strCSV,Len(strDelimiter) + 1)
    \'Write to File
    Print #intOpenFile,strCSV
  End If

  \'Write records to the CSV
  Do Until .EOF
    strCSV = \"\"
    For Each fld In .Fields
      If fld.Type = dbText Or fld.Type = dbMemo Then
        strCSV = strCSV & strDelimiter & strQualifier & fld.Value & strQualifier
      Else
        strCSV = strCSV & strDelimiter & fld.Value
      End If
    Next fld
    \' remove leading delimiter
    strCSV = Mid$(strCSV,Len(strDelimiter) + 1)
    \'Eliminate Back to back strQualifiers
    If Len(strQualifier) > 0 Then
      strCSV = Replace(strCSV,\"\")
    End If
    \'Write to File
    Print #intOpenFile,strCSV
    .MoveNext
  Loop

  .Close
End With

ExitHere:
  \'Close the file
  Close #intOpenFile

  Exit Sub

errhandler:
  With Err
     MsgBox \"Error \" & .Number & vbCrLf & .Description,_
       vbOKOnly Or vbCritical,\"ExportToCSV\"
  End With

  Resume ExitHere
End Sub
    

版权声明:本文内容由互联网用户自发贡献,该文观点与技术仅代表作者本人。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如发现本站有涉嫌侵权/违法违规的内容, 请发送邮件至 dio@foxmail.com 举报,一经查实,本站将立刻删除。

相关推荐


依赖报错 idea导入项目后依赖报错,解决方案:https://blog.csdn.net/weixin_42420249/article/details/81191861 依赖版本报错:更换其他版本 无法下载依赖可参考:https://blog.csdn.net/weixin_42628809/a
错误1:代码生成器依赖和mybatis依赖冲突 启动项目时报错如下 2021-12-03 13:33:33.927 ERROR 7228 [ main] o.s.b.d.LoggingFailureAnalysisReporter : *************************** APPL
错误1:gradle项目控制台输出为乱码 # 解决方案:https://blog.csdn.net/weixin_43501566/article/details/112482302 # 在gradle-wrapper.properties 添加以下内容 org.gradle.jvmargs=-Df
错误还原:在查询的过程中,传入的workType为0时,该条件不起作用 <select id="xxx"> SELECT di.id, di.name, di.work_type, di.updated... <where> <if test=&qu
报错如下,gcc版本太低 ^ server.c:5346:31: 错误:‘struct redisServer’没有名为‘server_cpulist’的成员 redisSetCpuAffinity(server.server_cpulist); ^ server.c: 在函数‘hasActiveC
解决方案1 1、改项目中.idea/workspace.xml配置文件,增加dynamic.classpath参数 2、搜索PropertiesComponent,添加如下 <property name="dynamic.classpath" value="tru
删除根组件app.vue中的默认代码后报错:Module Error (from ./node_modules/eslint-loader/index.js): 解决方案:关闭ESlint代码检测,在项目根目录创建vue.config.js,在文件中添加 module.exports = { lin
查看spark默认的python版本 [root@master day27]# pyspark /home/software/spark-2.3.4-bin-hadoop2.7/conf/spark-env.sh: line 2: /usr/local/hadoop/bin/hadoop: No s
使用本地python环境可以成功执行 import pandas as pd import matplotlib.pyplot as plt # 设置字体 plt.rcParams['font.sans-serif'] = ['SimHei'] # 能正确显示负号 p
错误1:Request method ‘DELETE‘ not supported 错误还原:controller层有一个接口,访问该接口时报错:Request method ‘DELETE‘ not supported 错误原因:没有接收到前端传入的参数,修改为如下 参考 错误2:cannot r
错误1:启动docker镜像时报错:Error response from daemon: driver failed programming external connectivity on endpoint quirky_allen 解决方法:重启docker -> systemctl r
错误1:private field ‘xxx‘ is never assigned 按Altʾnter快捷键,选择第2项 参考:https://blog.csdn.net/shi_hong_fei_hei/article/details/88814070 错误2:启动时报错,不能找到主启动类 #
报错如下,通过源不能下载,最后警告pip需升级版本 Requirement already satisfied: pip in c:\users\ychen\appdata\local\programs\python\python310\lib\site-packages (22.0.4) Coll
错误1:maven打包报错 错误还原:使用maven打包项目时报错如下 [ERROR] Failed to execute goal org.apache.maven.plugins:maven-resources-plugin:3.2.0:resources (default-resources)
错误1:服务调用时报错 服务消费者模块assess通过openFeign调用服务提供者模块hires 如下为服务提供者模块hires的控制层接口 @RestController @RequestMapping("/hires") public class FeignControl
错误1:运行项目后报如下错误 解决方案 报错2:Failed to execute goal org.apache.maven.plugins:maven-compiler-plugin:3.8.1:compile (default-compile) on project sb 解决方案:在pom.
参考 错误原因 过滤器或拦截器在生效时,redisTemplate还没有注入 解决方案:在注入容器时就生效 @Component //项目运行时就注入Spring容器 public class RedisBean { @Resource private RedisTemplate<String
使用vite构建项目报错 C:\Users\ychen\work>npm init @vitejs/app @vitejs/create-app is deprecated, use npm init vite instead C:\Users\ychen\AppData\Local\npm-