【发布时间】:2015-06-24 15:16:18
【问题描述】:
我有一个 Excel 电子表格,可以生成应用程序中使用的 CSV 脚本。脚本必须采用非常特定的格式,并且我以 XLSX 格式保存主文件,其中包含受保护的工作表和数据验证以保存 CSV,而不是直接编辑 CSV,因为直接编辑 CSV 可能会导致错误。
问题是脚本几乎可以是任意长度。每行的左列只能是一组值中的一个,最后一行必须说“END”。在没有 VBA 的情况下我可以做到这一点的唯一方法是 A 列中的以下公式,从第 7 行(前 6 行是标题信息)到第 1048576 行(最后一个 Excel 行)并保护 A 列锁定的工作表:
=IF(AND(ISBLANK(B368),NOT(ISBLANK(B367))),"END",IF(ISBLANK(B368),"",A367))
这使得 A 列中的最后一行显示为“END”,空白之后的所有行都显示为“END”,这是所需的。问题是现在保存 CSV 文件时,它总是有 1048576 行,所有底部行都包含分隔符 ",,,," 。这不起作用,CSV 文件需要在“END”行之后停止。有没有办法编写公式,导致 Excel 在保存到 CSV 时忽略评估为空白的单元格,或者在 Excel 中保存到 CSV 的另一种方法将忽略所有评估为空白的行?
注意:我已经在 VBA 中有一个可以在我自己的机器上使用的解决方案(它将数据复制到“END”,以纯文本格式粘贴到新工作表中,然后以 CSV 的名称保存原始工作表)。然而,我想分享这张表,绕过安全限制在我的公司分享宏是一件痛苦的事。所以我正在寻找一种可以在没有宏的情况下完成的方法,如果可能的话。
在寻找答案时,我发现了这个链接,它很相似,但又不一样: Saving Excel data as csv with VBA - removing blank rows at end of file to save
由于我拥有的“空白”是活动行,因为它们包含公式,因此此方法不起作用。
【问题讨论】:
-
如您所见,零长度文本单元格与空单元格不同(您可以使用函数
=ISBLANK()测试差异)。如果排除了宏,为什么不能在“END”单元格之后手动删除 Col A 中的单元格?您甚至可以将=IF(..,"END",IF(..,"",..))中的“”更改为独特的内容,例如“@@@”甚至“删除我”以帮助记忆。 -
这是我目前所做的,但如果有一些需要较少人工干预的事情,这对我和我分享它的人来说会更容易。它还将最大程度地减少错误,例如在保存之前忘记删除并改为保存整个工作表。此外,如果我们需要修改已经存在的脚本来添加更多步骤,最好不必重新填写公式。