首页
学习
活动
专区
圈层
工具
发布
首页
学习
活动
专区
圈层
工具
社区首页 >问答首页 >有没有办法将范围批量写入文本/CSV文件?

有没有办法将范围批量写入文本/CSV文件?
EN

Stack Overflow用户
提问于 2012-10-25 21:08:38
回答 4查看 18K关注 0票数 3

我习惯于使用VBA中的write命令将一系列单元格的内容(值)写入文本文件,例如:

write #myfile, Range("A1").value, Range("A2).value, Range("A3).value

有没有一种更优雅、更方便的内置方法,可以将整个范围直接转储到分隔文件中,甚至可以一次转储到多行?或者,是否有人提出了定制的解决方案?我认为这将是非常有用的。

EN

回答 4

Stack Overflow用户

回答已采纳

发布于 2012-10-25 21:20:08

我给你写了这个,它仍然可以改进,但我认为它已经足够好了:

代码语言:javascript
代码运行次数:0
运行
AI代码解释
复制
Sub SaveRangeAsCSV(r As Range, filename As String, overwrite As Boolean)
    Dim wB As Workbook
    Dim c As Range
    Dim usedRows As Long
    If overwrite Then
        If Dir(filename) <> "" Then Kill filename
        If Err.Number <> 0 Then
            MsgBox "Could not delete previously existing file." & vbNewLine & Err.Number & ": " & Err.Description
            Exit Sub
        End If
    End If
    If Dir(filename) <> "" Then
        Set wB = Workbooks.Open(filename)
    Else
        Set wB = Workbooks.Add
    End If

    With wB.Sheets(1)
        usedRows = .UsedRange.Rows.Count
        'Check if more than 1 row is in the used range.
        If usedRows = 1 Then
            'Since there's only 1 row, see if there's more than 1 cell.
            If .UsedRange.Cells.Count = 1 Then
                'Since there's only 1 cell, check the contents
                If .Cells(1, 1) = "" Then
                      'you're dealing with a blank workbook
                      usedRows = 0
                End If
            End If
        End If
        'Check if range is contigious
        If InStr(r.Address, ",") Then
            For Each c In r.Cells
                .Range(c.Address).Offset(usedRows, 0).Value = c.Value
            Next
        Else
            .Range(r.Address).Offset(usedRows, 0).Value = r.Value
        End If
    End With
    wB.SaveAs filename, xlCSV, , , , False
    wB.Saved = True
    wB.Close
End Sub
Sub Example()
    'I used Selection here just to make it easier to test.
    'Substitute your actual range, and actual desired filepath
    'If you pass false for overwrite, it assumes you want to append
    'It will give you a pop-up asking if you want to overwrite, which I could avoid
    'by copying the worksheet and then closing and deleting the file etc... but I
    'already spent enough time on this one.
    SaveRangeAsCSV Selection, "C:\proofOfConcept.csv", False
End Sub

在使用它时,只需提供实际范围、实际文件名以及是否要覆盖该文件。:)已更新为允许非连续范围。对于合并的单元格,它将最终将值放入合并区域的第一个单元格中。

票数 4
EN

Stack Overflow用户

发布于 2012-10-25 22:01:25

这是我自己想出来的解决方案,在我看来最适合我的需求:

代码语言:javascript
代码运行次数:0
运行
AI代码解释
复制
Sub DumpRangeToTextFile(filehandle As Integer, source As Range)
Dim row_range As Range, mycell As Range
For Each row_range In source.rows
    For Each mycell In row_range.cells
        Write #filehandle, mycell.Value;
    Next mycell
    Write #filehandle,
Next row_range
End Sub

短小精悍!;)

尽管如此,我还是给了丹尼尔·库克的解决方案,它也是非常有用的,值得称赞。

票数 2
EN

Stack Overflow用户

发布于 2016-02-28 22:29:00

上面的这些方法遍历单元格区域,以便导出数据。由于所有的错误检查,任何倾向于循环遍历工作表中的单元格范围的操作都会非常慢。

这是我在没有迭代的情况下完成的一种方法。基本上,它使用内置的函数"Join()“来做繁重的工作,这将是您的迭代循环。这要快得多。

我在另一篇文章中详细介绍了相关的Read()子例程:https://stackoverflow.com/a/35688988/2800701

这是Write()子例程(注意:此例程假定您的文本在导出之前已预先格式化为工作表中的正确规范;它仅适用于多个列范围的单个column...not ):

代码语言:javascript
代码运行次数:0
运行
AI代码解释
复制
Public Sub WriteRangeAsPlainText(ExportRange As Range, Optional textfilename As Variant)
   If IsMissing(textfilename) Then textfilename = Application.GetSaveAsFilename(FileFilter:="Text Files (*.txt), *.txt")
   If textfilename = "" Then Exit Sub

   Dim filenumber As Integer
   filenumber = FreeFile
   Open textfilename For Output As filenumber

   Dim textlines() As Variant, outputvar As Variant

   textlines = Application.Transpose(ExportRange.Value)
   outputvar = Join(textlines, vbCrLf)
   Print #filenumber, outputvar
   Close filenumber
End Sub
票数 1
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/13077317

复制
相关文章
python pandas读取csv文件_pandas将数据写入csv
发布者:全栈程序员栈长,转载请注明出处:https://javaforall.cn/175441.html原文链接:https://javaforall.cn
全栈程序员站长
2022/09/27
5.9K0
python pandas读取csv文件_pandas将数据写入csv
Python 将数据写入文件(txt、csv、excel)
一、将列表数据写入txt、csv、excel 1、写入txt def text_save(filename, data):#filename为写入CSV文件的路径,data为要写入数据列表. file = open(filename,'a') for i in range(len(data)): s = str(data[i]).replace('[','').replace(']','')#去除[],这两行按数据不同,可以选择 s = s.replace
菲宇
2019/07/31
41.3K0
python爬虫将数据写入csv文件乱码
养成习惯,先赞后看!!! 出现乱码根本原因就是编码方式不对,但是博主自己尝试了三种编码方式终于找到了最合适的。
萌萌哒的瓤瓤
2020/08/26
3.9K0
python爬虫将数据写入csv文件乱码
【Python】批量提取图片经纬度并写入csv文件
无人机图片中往往包含经纬度信息,需要一个脚本批量将文件夹中包含经纬度信息的图片提取出来,保存成csv文件。
zstar
2022/12/07
1.9K0
【Python】批量提取图片经纬度并写入csv文件
java读取写入CSV文件
[1]使用Split函数分成一个String[]: https://blog.csdn.net/u013555719/article/details/106029538
演化计算与人工智能
2020/08/14
4.1K0
java读取写入CSV文件
利用Python批量将csv文件转化成xml文件
将 csv 格式转换成xml格式有许多方法,可以用数据库的方式,也有许多软件可以将 csv 转换成xml。但是比较麻烦,本文利用 Python 一键批量将 csv 文件转化成 xml 文件。
叶庭云
2021/12/01
1.7K0
利用Python批量将csv文件转化成xml文件
将文件夹中的文件信息统计写入到csv中
今天在整理一些资料,将图片的名字信息保存到表格中,由于数据有些多所以就写了一个小程序用来自动将相应的文件夹下的文件名字信息全部写入到csv文件中,一秒钟搞定文件信息的保存,省时省力!
小海怪的互联网
2019/09/18
9.2K0
将文件字节输出流写入到文本中
1 package DEMO; 2 3 import java.io.File; 4 import java.io.FileOutputStream; 5 import java.io.IOException; 6 import java.io.OutputStream; 7 import java.util.Scanner; 8 9 /* 10 * 文件字节输出流 2014-7-29 11 * 1.给出输出流的目的地 12 * 2.创建指向目的地的输出流 13
Gxjun
2018/03/22
2.6K0
将文件字节输出流写入到文本中
python 实现将字典写入csv文件
shutdown={"yunfeiyang":{"username":"yunfeiyang","binding_house":{0:"1",1:"2"},"register_time":"2018-20"}}
py3study
2020/01/08
2.8K0
python读取与写入csv EXCEK HDF 文件
一. 数据文件         pd指pandas简称,df指DataFrame对象。 1. csv 读取  pd.read_csv('foo.csv') 写入  df.to_csv('foo.csv') 2. HDF5 读取  pd.read_hdf('foo.h5', 'df') 写入  df.to_hdf('foo.h5', 'df') 3. Excel 读取  pd.read_excel('foo.xlsx', 'sheet1', index_col=None, na_values=['NA']) 写入  df.to_excel('foo.xlsx', sheet_name='sheet1') 二. 数据结构 1. Series         Series是一维标记数组,可以存储任意数据类型,如整型、字符串、浮点型和Python对象等,轴标一般指索引。创建Series的方法为 >>>s=Series(data, index=index) data可以是Python词典、ndarray和标量值。 2. DataFrame         DataFrame是二维标记数据结构,列可以是不同的数据类型。它是最常用的pandas对象,像Series一样可以接收多种输入:lists、dicts、series和DataFrame等。初始化对象时,除了数据还可以传index和columns这两个参数。 3. Panel         Panel很少使用,然而是很重要的三维数据容器。Panel data源于经济学,也是pan(el)-da(ta)-s的来源。在交叉分析中,坐标轴的名称略显随意 items: axis 0  代表DataFrame的item major_axis: axis 1  代表DataFrames的index(行) minor_axis: axis 2  代表DataFrames的列 4. Panel4D         Panel4D是像Panel一样的4维容器,作为N维容器的一个测试。 labels: axis 0  每个item相当于panel items: axis 1  每个item相当于DataFrame major_axis: axis 2  它是dataframe的index minor_axis: axis 3  它是dataframe的columns         Panel4D是Panel的一个子集,因此Panel的大多数方法可用于4D,但以下方法不可用:join, to_excel, to_frame, to_sparse, groupby。 5. PanelND         PanelND是一个拥有factory集合,可以创建像Panel4D一样N维命名容器的模块。
学到老
2019/02/14
1.8K0
Python将数据写入txt文件_python将内容写入txt文件
readlines() 会把每一行的数据作为一个元素放在列表中返回,读取所有行的数据
全栈程序员站长
2022/11/11
12.4K0
python读取与写入csv EXCEK HDF 文件
一. 数据文件         pd指pandas简称,df指DataFrame对象。 1. csv 读取  pd.read_csv('foo.csv') 写入  df.to_csv('foo.csv') 2. HDF5 读取  pd.read_hdf('foo.h5', 'df') 写入  df.to_hdf('foo.h5', 'df') 3. Excel 读取  pd.read_excel('foo.xlsx', 'sheet1', index_col=None, na_values=['NA'])
学到老
2018/03/16
2.2K0
csv写入与读取
import csv #若存在文件,则打开csv文件,若不存在,则新建文件 #若不设置newline=””,则每行数据会隔一行空包行 csvfile = open(“csv_test.csv”,”w”,newline = “”) #w是覆盖形写入,a是追加写入 #将文件加载到csv对象中 writer = csv.writer(csvfile) #写入一行数据 writer.writerow([‘姓名’,’年龄’,’电话’]) #多行数据写入 data = [ (‘张三’,’18’,’0291321332′), (‘李四’,’21’,’2932131934′) ] writer.writerows(data) #关闭csv对象 csvfile.close()
kirin
2021/03/11
1.1K0
Java批量写入文件和下载图片
很久没有在WhitMe上写日记了,因为觉着在App上写私密日记的话肯定是不安全的,但是想把日记存下来。,然后看到有导出日记的功能,就把日记导出了(还好可以直接导出,不然就麻烦点)。导出的是一个html文件。可以直接打开,排版都还在。
sunonzj
2022/06/21
1.5K0
Java批量写入文件和下载图片
使用CSV模块和Pandas在Python中读取和写入CSV文件
CSV文件是一种纯文本文件,其使用特定的结构来排列表格数据。CSV是一种紧凑,简单且通用的数据交换通用格式。许多在线服务允许其用户将网站中的表格数据导出到CSV文件中。CSV文件将在Excel中打开,几乎所有数据库都具有允许从CSV文件导入的工具。标准格式由行和列数据定义。此外,每行以换行符终止,以开始下一行。同样在行内,每列用逗号分隔。
用户7466307
2020/06/16
20.1K0
matlab批量处理excel(CSV)文件数据
今天是2019-1-29,参加完2019年美国大学生数学建模竞赛,小伙伴都回家了,就我一个人在寝室,太无聊了,就把在比赛中遇到的excel批处理,写一下思路(ps:其实我在比赛中 利用的是SQLServer数据库和matlab相结合的数据处理方法,但是一般情况下遇到的都是matlab对excel数据批处理,所以降低要求写了matlab对excel数据批处理,此思路都是小编凭感觉自己摸索出来的,如有错误欢迎指出)。
全栈程序员站长
2022/09/14
1K0
matlab批量处理excel(CSV)文件数据
Python: 将TXT文件写入MySQ
安装MySQLdb时,报错缺少Visual C++ 9.0。解决方法:下载并安装MySQL-python 1.2.5 . https://pypi.python.org/pypi/MySQL-python/1.2.5
py3study
2020/01/07
2.1K0
记一次python写入txt文件正常,但是写入csv文件中文乱码问题
今天在将已经爬取完存成txt文件批量导入保存csv格式时,文本中的汉字能够正常正常显示,但是用正常的方法保存到csv中就成了乱码。 最开始的写法:
小海怪的互联网
2019/08/23
4.5K0
python 将读取的数据写入txt文件_c中怎样将数据写入txt文件
版权声明:本文内容由互联网用户自发贡献,该文观点仅代表作者本人。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如发现本站有涉嫌侵权/违法违规的内容, 请发送邮件至 举报,一经查实,本站将立刻删除。
全栈程序员站长
2022/11/09
6.4K0
将DataTable转换成CSV文件
该文介绍了如何将DataTable转换成CSV文件的方法,包括使用C#和StreamWriter等工具。
彭泽0902
2018/01/04
1.5K0

相似问题

有没有办法将写入文本文件的文本对齐?

11

Spring批量读取xml写入csv文件

11

有没有办法将"null“值从数据库写入csv文件?

122

有没有办法将标准文本文件转换为csv文件

115

将文本文件写入csv文件

227
添加站长 进交流群

领取专属 10元无门槛券

AI混元助手 在线答疑

扫码加入开发者社群
关注 腾讯云开发者公众号

洞察 腾讯核心技术

剖析业界实践案例

扫码关注腾讯云开发者公众号
领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档
查看详情【社区公告】 技术创作特训营有奖征文