如何将工作表或表格或选定内容导出为其他文件格式不改变当前活动文档?
我们的主要数据操作环境是 Excel,其中大量使用格式和公式来获得我们想要的结果。然后保存结果以便.CSV
与其他程序互操作。
当“文件 >>另存为>> 另存为类型 >> CSV”用于创建 .csv 文件和活动文档将更改为saved_file.csv
。有一些警告,指出使用此新格式会丢失功能和格式,但除此之外,用户界面没有变化。有粗体和斜体、不同的字体和大小、背景单元格填充、定义的表格范围等。单元格中的所有公式都保持不变。
这是一场即将发生的灾难。用户重新开始工作,误以为一切都很正常,很快就忘记了当前格式不支持任何魔法,并继续做重要的事情(tm)。午餐时间到了,他们关闭 Excel,对那些他们一直看到却没有读过的烦人的对话框点击两次“是”,然后出门。……午餐后,用户回来发现从最初的另存为到退出之间的所有工作都消失了。
“文件 >>出口不幸的是,“只是另一条通往“另存为”的导航路线,也会将活动文档更改为“some_file.csv”。
我们需要的是将一些数据导出为另一种文件类型并保留活动文档“our-real-data.xlsx”。
如何实现?并将其添加到菜单或功能区以便一键执行?
如何与组织中的每个人共享它?(无需要求个人用户打开 VBA 编辑器等)
答案1
我们需要的是将一些数据导出为另一种文件类型并保留活动文档“our-real-data.xlsx”。
CSV_工具.xla
既然您提到了这一点,我就整理了一个可以导出为 CSV 的快速 VBA 插件。我尝试使用尽可能少的代码,以便新用户可以更轻松地理解它。
它是什么
- 插件询问将 CSV 保存在哪里。默认文件夹是保存 XLS 的文件夹
- 插件会自动检测是否应使用逗号或分号作为分隔符,具体取决于您的区域系统设置
- 当前活动的 Excel 工作表的所有值都将导出到以 XLS 文件命名的新 CSV 文件中
- 现有的 XLS 不会受到任何影响
安装
- 下载加入并将其保存到
C:\Users\%USERNAME%\AppData\Roaming\Microsoft\AddIns
- 打开 Excel 并在
- Excel 2003:菜单栏 → 工具 → 加载项
- Excel 2007:Excel 选项 → 加载项 → 转到
- Excel 2010-13:文件选项卡 → 选项 → 加载项 → 转到
重新启动 Excel 并查看菜单栏
VBA 代码
Function ExportCSV()
Dim fso As Object
Set fso = CreateObject("Scripting.FileSystemObject")
On Error Resume Next
ChDrive (ActiveWorkbook.Path)
ChDir (ActiveWorkbook.Path)
strName = fso.GetBaseName(ActiveWorkbook.Name)
On Error GoTo 0
strFilename = Application.GetSaveAsFilename(strName, "CSV Files,*.csv", 1)
delimiter = Application.International(xlListSeparator)
If Not strFilename = False Then
Open strFilename For Append As #1
For Each rngRow In ActiveSheet.UsedRange.Rows
arr2D = rngRow
arr1D = Application.Index(arr2D, 1, 0)
strRow = Join(arr1D, delimiter)
Print #1, strRow
Next
Close #1
End If
End Function
为不同用户自动更新
一旦每个用户都在其 Excel 中启用了该插件(无法自动执行),您就可以.xla
通过网络共享、Robocopy 或类似工具复制新文件版本。但这应该是一个单独的问题,因为有太多不同的方法可以解决这个问题。
对于 VBA 极客来说,最有趣的部分是
arr2D = rngRow
arr1D = Application.Index(arr2D, 1, 0)
strRow = Join(arr1D, delimiter)
使用 Join() 函数将某个范围(本例中为一行)转换为二维数组,然后转换为一维数组,最后转换为单个字符串
答案2
教导用户打开该数据的副本。
选择 Office 文档时,您可以右键单击图标,然后单击“新建”。这将基于原始文档/工作表/演示文稿创建新文档/工作表/演示文稿。用户只需执行“另存为”即可从中导出
如果您这么担心的话,我希望您也有一个好的备份......