目前我正在 bash 脚本中从 sql 生成一个 csv 文件。然后我将它通过电子邮件发送给其他人。我被要求在通过电子邮件发送之前向文件添加自动过滤器(一个 excel 概念)。我希望能够在没有人工交互的情况下在 bash 脚本中执行此操作。到目前为止,谷歌搜索/stackoverflowing 我还没有找到一种方法来做到这一点。
最佳答案
CSV 无法应用自动筛选。 Excel 可读且能够应用自动筛选的最简单格式是 Excel 2003 SpreadsheetML。参见 https://msdn.microsoft.com/en-us/library/bb226687%28v=office.11%29.aspx和 https://msdn.microsoft.com/en-us/library/bb226693%28v=office.11%29.aspx
这也是纯文本,因此可以通过 bash 脚本创建。
AutoFilter 的简单示例:
<?xml version="1.0"?>
<?mso-application progid="Excel.Sheet"?>
<Workbook xmlns="urn:schemas-microsoft-com:office:spreadsheet"
xmlns:o="urn:schemas-microsoft-com:office:office"
xmlns:x="urn:schemas-microsoft-com:office:excel"
xmlns:ss="urn:schemas-microsoft-com:office:spreadsheet"
xmlns:html="http://www.w3.org/TR/REC-html40">
<Worksheet ss:Name="Sheet1">
<Table>
<Row>
<Cell><Data ss:Type="String">name</Data></Cell>
<Cell><Data ss:Type="String">value</Data></Cell>
</Row>
<Row>
<Cell><Data ss:Type="String">a</Data></Cell>
<Cell><Data ss:Type="Number">1</Data></Cell>
</Row>
<Row>
<Cell><Data ss:Type="String">a</Data></Cell>
<Cell><Data ss:Type="Number">2</Data></Cell>
</Row>
<Row>
<Cell><Data ss:Type="String">b</Data></Cell>
<Cell><Data ss:Type="Number">1</Data></Cell>
</Row>
<Row>
<Cell><Data ss:Type="String">b</Data></Cell>
<Cell><Data ss:Type="Number">2</Data></Cell>
</Row>
<Row>
<Cell><Data ss:Type="String">c</Data></Cell>
<Cell><Data ss:Type="Number">1</Data></Cell>
</Row>
<Row>
<Cell><Data ss:Type="String">c</Data></Cell>
<Cell><Data ss:Type="Number">2</Data></Cell>
</Row>
</Table>
<AutoFilter x:Range="R1C1:R7C2" xmlns="urn:schemas-microsoft-com:office:excel">
</AutoFilter>
</Worksheet>
</Workbook>
另一种可能性是,bash 脚本可以调用可以创建真正的 XLS
或 XLSX
文件的软件。
关于linux - 在 linux 中使用过滤器将 csv 转换为 excel 工作表,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/31539897/