`
sunwe
  • 浏览: 13594 次
  • 性别: Icon_minigender_1
  • 来自: 德州
文章分类
社区版块
存档分类
最新评论

输出和下载excel报表(xls和csv格式)

阅读更多

对于excel支持的csv和xls格式的报表,一直以为xls生成较难一些,因为csv只是多行以","分割的文本文件,被excel读取之后可以显示于电子表格内,但是支持的效果不好,比如不能固定表格的宽高,不能设置单元格背景,不能设置复杂的表格样式,不能添加各种运算函数,不能设置打印区域,只能显示,充其量是个数据文件.

php生成csv很简单,但是对于生成可以完成很多功能的xls格式却有点力不从心,(据说需要调用微软的com组件,php还需要安装扩展),用记事本读取xls,满屏的乱码,找不到头绪.

从网上找过一个php写入xls文件的类,很简单,只有5个方法,但是是生成最简单的xls文件,比csv强不到哪里.但是,我从类里却看出了一点门道,这个类输出的是个xml代码,然后放出几个header声明了MIME类型,这样下载下来就是以xml写的xls格式文件.那么就是说,excel同样支持xml显示数据(这个我是刚知道的,)

于是我新建了一个xls文档,用excel打开,输入简单数据和设置了下格式之后,另存为 xml 表格 格式,然后让excel打开这个xml文件,数据和格式都完整显示了.假如将这个xml的后缀改成xls,肯定也没问题了.

那么我们拿着这个xml文档用作模板让php读取,去动态输出数据,然后和那个类一样,抛出几个关键的header,就能搞定xls格式的报表下载了.

我一直使用thinkphp框架做php开发,设置的模板默认后缀为html,肯定不能读取xml的后缀,所以如果应用于框架级别的模板,你需要修改后缀xml为html等需要的.对于smarty模板引擎就完全不用担心了.

下面是个我生成的xml:

<?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">
 <DocumentProperties xmlns="urn:schemas-microsoft-com:office:office">
  <Created>1996-12-17T01:32:42Z</Created>
  <LastSaved>2010-09-04T07:06:33Z</LastSaved>
  <Version>11.9999</Version>
 </DocumentProperties>
 <OfficeDocumentSettings xmlns="urn:schemas-microsoft-com:office:office">
  <RemovePersonalInformation/>
 </OfficeDocumentSettings>
 <ExcelWorkbook xmlns="urn:schemas-microsoft-com:office:excel">
  <WindowHeight>4530</WindowHeight>
  <WindowWidth>8505</WindowWidth>
  <WindowTopX>480</WindowTopX>
  <WindowTopY>120</WindowTopY>
  <AcceptLabelsInFormulas/>
  <ProtectStructure>False</ProtectStructure>
  <ProtectWindows>False</ProtectWindows>
 </ExcelWorkbook>
 <Styles>
  <Style ss:ID="Default" ss:Name="Normal">
   <Alignment ss:Vertical="Bottom"/>
   <Borders/>
   <Font ss:FontName="宋体" x:CharSet="134" ss:Size="12"/>
   <Interior/>
   <NumberFormat/>
   <Protection/>
  </Style>
  <Style ss:ID="s21">
   <Borders>
    <Border ss:Position="Bottom" ss:LineStyle="Continuous" ss:Weight="1"/>
    <Border ss:Position="Left" ss:LineStyle="Continuous" ss:Weight="1"/>
    <Border ss:Position="Right" ss:LineStyle="Continuous" ss:Weight="1"/>
    <Border ss:Position="Top" ss:LineStyle="Continuous" ss:Weight="1"/>
   </Borders>
  </Style>
 </Styles>
 <Worksheet ss:Name="Sheet1">
  <Names>
   <NamedRange ss:Name="Print_Area" ss:RefersTo="=Sheet1!R1C1:R17C5"/>
  </Names>
  <Table ss:ExpandedColumnCount="6" ss:ExpandedRowCount="3" x:FullColumns="1"
   x:FullRows="1" ss:DefaultColumnWidth="54" ss:DefaultRowHeight="14.25">
   <Column ss:AutoFitWidth="0" ss:Width="52.5"/>
   <Column ss:Index="3" ss:AutoFitWidth="0" ss:Width="65.25"/>
   <Column ss:AutoFitWidth="0" ss:Width="81"/>
   <Row ss:AutoFitHeight="0">
    <Cell ss:StyleID="s21"><Data ss:Type="String">栏位1</Data><NamedCell
      ss:Name="Print_Area"/></Cell>
    <Cell ss:StyleID="s21"><Data ss:Type="String">栏位2</Data><NamedCell
      ss:Name="Print_Area"/></Cell>
    <Cell ss:StyleID="s21"><Data ss:Type="String">栏位3</Data><NamedCell
      ss:Name="Print_Area"/></Cell>
    <Cell ss:StyleID="s21"><Data ss:Type="String">栏位4</Data><NamedCell
      ss:Name="Print_Area"/></Cell>
    <Cell ss:StyleID="s21"><Data ss:Type="String">栏位5</Data><NamedCell
      ss:Name="Print_Area"/></Cell>
   </Row>
   <Row ss:AutoFitHeight="0">
    <Cell ss:StyleID="s21"><Data ss:Type="Number">23</Data><NamedCell
      ss:Name="Print_Area"/></Cell>
    <Cell ss:StyleID="s21"><Data ss:Type="Number">23</Data><NamedCell
      ss:Name="Print_Area"/></Cell>
    <Cell ss:StyleID="s21"><Data ss:Type="Number">234</Data><NamedCell
      ss:Name="Print_Area"/></Cell>
    <Cell ss:StyleID="s21"><Data ss:Type="Number">4</Data><NamedCell
      ss:Name="Print_Area"/></Cell>
    <Cell ss:StyleID="s21"><Data ss:Type="Number">34</Data><NamedCell
      ss:Name="Print_Area"/></Cell>
    <Cell ss:Formula="=SUM(RC[-5]:RC[-1])"><Data ss:Type="Number">318</Data></Cell>
   </Row>
   <Row ss:AutoFitHeight="0">
    <Cell ss:StyleID="s21"><Data ss:Type="Number">23</Data><NamedCell
      ss:Name="Print_Area"/></Cell>
    <Cell ss:StyleID="s21"><Data ss:Type="Number">23</Data><NamedCell
      ss:Name="Print_Area"/></Cell>
    <Cell ss:StyleID="s21"><Data ss:Type="Number">234</Data><NamedCell
      ss:Name="Print_Area"/></Cell>
    <Cell ss:StyleID="s21"><Data ss:Type="Number">4</Data><NamedCell
      ss:Name="Print_Area"/></Cell>
    <Cell ss:StyleID="s21"><Data ss:Type="Number">34</Data><NamedCell
      ss:Name="Print_Area"/></Cell>
   </Row>
  </Table>
  <WorksheetOptions xmlns="urn:schemas-microsoft-com:office:excel">
   <Unsynced/>
   <Selected/>
   <FreezePanes/>
   <FrozenNoSplit/>
   <SplitVertical>3</SplitVertical>
   <LeftColumnRightPane>3</LeftColumnRightPane>
   <ActivePane>1</ActivePane>
   <Panes>
    <Pane>
     <Number>3</Number>
    </Pane>
    <Pane>
     <Number>1</Number>
     <ActiveRow>5</ActiveRow>
     <ActiveCol>6</ActiveCol>
    </Pane>
   </Panes>
   <ProtectObjects>False</ProtectObjects>
   <ProtectScenarios>False</ProtectScenarios>
  </WorksheetOptions>
 </Worksheet>
</Workbook>

 

 

 

这段xml本来有三个Worksheet,对应三个工作表,对于最后没用到的那俩就删除了,只保留了第一个.(这个可以根据需要添加),唯一的一个工作表标记<Worksheet ss:Name="Sheet1">,我们很简单就能看出来Sheet1是该工作表的名称,这个地方可以是动态设置的.

<Names>
   <NamedRange ss:Name="Print_Area" ss:RefersTo="=Sheet1!R1C1:R17C5"/>
  </Names>
这段是声明该工作表的打印区域,后面的属性不太懂,貌似是个参考的打印区域.实际的打印区域在后面设置.

<Table ss:ExpandedColumnCount="6" ss:ExpandedRowCount="3" x:FullColumns="1"
   x:FullRows="1" ss:DefaultColumnWidth="54" ss:DefaultRowHeight="14.25">
这段很重要,对于需要表格线显示的xls,会自动出现这个table标记,属性ExpandedColumnCount是列数,一般列数是固定的,如果不固定请动态设置这里.ExpandedRowCount是行数,而行数一般是不固定的,所以需要设置这里和下面的数据行数一致.如果这两个属性和实际的数据行数和列数不一致,excel就会报错.一定要注意.

<Column ss:AutoFitWidth="0" ss:Width="52.5"/>
这种是设置列属性的,一般让excel去做这部分,不需要手工去改.

<Row ss:AutoFitHeight="0">
    <Cell ss:StyleID="s21"><Data ss:Type="String">栏位1</Data><NamedCell
      ss:Name="Print_Area"/></Cell>
    <Cell ss:StyleID="s21"><Data ss:Type="String">栏位2</Data><NamedCell
      ss:Name="Print_Area"/></Cell>
    <Cell ss:StyleID="s21"><Data ss:Type="String">栏位3</Data><NamedCell
      ss:Name="Print_Area"/></Cell>
    <Cell ss:StyleID="s21"><Data ss:Type="String">栏位4</Data><NamedCell
      ss:Name="Print_Area"/></Cell>
    <Cell ss:StyleID="s21"><Data ss:Type="String">栏位5</Data><NamedCell
      ss:Name="Print_Area"/></Cell>
   </Row>

好了,上面是一行数据,和html的table里的

<tr>

<td>...</td>

</tr>

是不是很像?

你只需要动态输出Data标记间的数据就行了,显示的效果让excel去做,千万注意cell的个数和row行数,一定要和table标记里的那两个属性一致.

<Cell ss:Formula="=SUM(RC[-5]:RC[-1])"><Data ss:Type="Number">318</Data></Cell>
这个单元格是在excel里设置过函数的

 

 

通观这大段的xml代码,实际需要我们操作的很少,很多只需要在excel里面设置好就行了.

 

了解了excel支持的这段xml格式,你还头疼xls格式的报表下载吗? 呵呵

1
0
分享到:
评论

相关推荐

    XlS批量生成CSV 多个CSV合并为1个CSV

    这种格式支持复杂的计算和格式化,但处理大量数据时可能会遇到性能问题。 CSV(Comma Separated Values)文件则是一种轻量级的数据交换格式。它以纯文本形式存储表格数据,每一行代表一条记录,列之间用逗号分隔。...

    导出pdf、csv、excel报表

    "导出pdf、csv、excel报表"这一主题涵盖了三种常见的数据格式,它们在数据交换、存储和分析中扮演着关键角色。以下将详细介绍这些格式及其相关知识点。 PDF(Portable Document Format)是一种用于保留文档布局和...

    CSV转XLS工具

    但CSV文件无法直接在Excel中应用复杂的公式和格式,因此转换成XLS格式就显得很有必要。 转换过程通常包括以下步骤: 1. 导入CSV文件:用户选择需要转换的CSV文件,工具会读取文件中的数据。 2. 分析数据结构:工具...

    jasperreport 生成pdf,html,xml,csv,xls报表,myeclipse源码

    **jasperreport** 是一个强大的开源报告生成工具,它允许开发者设计复杂的报表并以多种格式输出,如PDF、HTML、XML、CSV以及XLS。在Java应用中,jasperreport通常用于生成数据可视化的静态或交互式报表。这个源码...

    jquery列表输出XLS/PDF/CSV

    本文将深入探讨如何使用jQuery实现一个分页列表,并进一步介绍如何添加输出XLS、PDF和CSV格式的功能。 首先,让我们讨论分页列表的实现。分页是网页数据展示中常用的一种技术,尤其当数据量大时,为了提高用户体验...

    NPOI读写Excel和第三方dll读写CSV文件

    在IT行业中,处理数据时,Excel和CSV文件是非常常见的格式,尤其在数据分析、报表生成以及数据交换等场景中。本话题主要围绕“NPOI读写Excel”和“第三方DLL读写CSV文件”这两个核心知识点展开,同时提供了一系列...

    csv转换xls文件程序 可自定义分隔符

    在IT领域,数据处理是日常工作中不可或缺的一部分,而CSV(Comma Separated Values)和XLS(Excel)格式则是常见的数据存储方式。CSV文件因其简洁、通用性而被广泛使用,而XLS文件则提供了更丰富的格式化和计算功能...

    使用Aspose.Cells for java完成复杂Excel报表导出

    此外,Aspose.Cells还提供了丰富的样式和格式选项,如设置单元格字体、颜色、边框、填充、对齐方式等,以及创建和编辑公式、图表、图片等复杂元素。对于需要创建复杂报表的开发人员来说,这些都是非常实用的功能。 ...

    C# WINFORM 操作Sql Server 数据库,xls csv txt 导入导出

    本教程将重点关注如何在C#的WinForm应用中操作SQL Server数据库,并实现Excel(xls)、CSV和TXT文件的导入导出功能。这在数据处理、报表生成以及数据交换等场景中非常实用。 首先,要与SQL Server进行交互,你需要...

    表格转CSV脚本

    Excel是一种功能强大的电子表格软件,常用于数据分析、报表制作等,而CSV(Comma Separated Values)文件则是一种通用的数据交换格式,因其简洁和兼容性广泛而受到青睐。本教程将详细介绍如何通过脚本将Excel文件...

    java导出CSV文件,EXCEL文件(不用指定下载路劲)

    在Java编程中,导出CSV(Comma Separated Values)和Excel文件是常见的数据处理任务,特别是在数据分析、报表生成和数据交换场景下。本篇将详细介绍如何在Java中实现这两个功能,无需指定下载路径,直接将文件保存到...

    免费Java Excel类库-Free Spire.XLS for Java-2.2.0

    - 图表操作:能够创建、编辑和格式化各种类型的图表,如柱状图、折线图、饼图等,并可以调整其样式和数据源。 - 数据验证:支持设置数据验证规则,限制用户输入的数据类型或范围。 - 图像处理:可以插入和调整...

    spire.xls c#/.net类库操作Excel,功能强大无需安装office

    使用Spire.XLS,开发者可以轻松创建新的Excel工作簿,添加工作表,设置单元格的值,以及自定义样式和格式。例如,你可以创建带有图表、公式、条件格式的复杂表格。 3. **读取Excel数据**: 对于已存在的Excel文件...

    单片机输出生成EXECL文件

    由于单片机通常不具备直接生成或解析复杂文件格式如Excel (.XLS) 的能力,我们可以采用一种简单的替代方法,即生成类似CSV(逗号分隔值)的文本文件,然后由PC端的软件(如Excel)读取并转换为正式的Excel格式。...

    XLS2CSVTool.rar

    Spire.XLS可能用于读取和操作Excel数据,而Spire.Pdf可能用于生成或读取PDF文档,虽然在描述中没有直接提到PDF,但有时转换工具会提供多种输出格式。 3. **Microsoft.mshtml.dll**:这是微软的HTML渲染组件,可能...

    EXCEL用VBA程序用ADO读取CSV

    CSV格式因其通用性和简洁性,常用于数据交换。下面我们将详细介绍如何使用VBA结合ADO来读取CSV文件。 首先,确保你的系统已经安装了Microsoft ActiveX Data Objects (ADO)库。在VBA环境中,可以通过“工具”-&gt;...

    使用jasperreports制作报表(导出pdf excel html)

    JasperReports支持多种输出格式,包括PDF、Excel (XLS)、HTML、CSV、XML、TXT等,这使得报表能够适应不同的应用场景。 ### 二、环境准备 在开始之前,你需要以下组件: 1. Java Development Kit (JDK):因为...

    报表技术POI&EasyPOI导入导出操作Excel、Word、CSV(讲义、源码、资料).zip

    EasyPOI通常用于快速生成报表,处理大批量数据,如批量生成Excel报表,或者从Excel中读取大量数据到数据库。 4. **EasyPOI的优势**:EasyPOI通过模板方式,减少了代码量,提高了开发效率。只需提供一个Excel模板,...

    TDMS转换为EXCEL.rar_TDMS_labview excel_tdms 用excel打开_tdms 转 excel_t

    4. **TDMS转Excel**:这个过程通常需要一个中间转换步骤,将TDMS文件的内容提取出来,然后保存为Excel可以识别的格式,如CSV或XLSX。 5. **TDMS转换**:转换过程可能涉及到解析TDMS文件的结构,提取数据,然后在...

    C#操作Excel(导入图片,转出CSV文件)

    在IT行业中,C#是一种广泛使用的编程语言,尤其在...通过以上方法,开发者可以灵活地在C#项目中处理Excel文件,满足导入图片和转换为CSV格式的需求。这些功能在数据处理、报表生成和自动化任务中具有广泛的应用价值。

Global site tag (gtag.js) - Google Analytics