13.5.1 写数据到 Excel

Excel 的互操作程序集都是标准的 .NET 程序集,我们可以在 F# Interactive 中使用 #r 指令进行引用。引用程序集之后,就能使用类了,既可以把Excel 作为独立(可见或不可见)的应用程序运行,也可以写脚本。清单 13.18 演示了如何启动 Excel,创建有一个工作表的新工作簿,以及把数据写入工作表。

清单13.18 启动 Excel 创建工作表 (F#)

#r "office.dll"
#r "Microsoft.Office.Interop.Excel.dll"
open System
open Microsoft.Office.Interop.Excel

let app = new ApplicationClass(Visible = true)     [1]
let workbook = app.Workbooks.Add(XlWBATemplate.xlWBATWorksheet)     [2]
let worksheet = (workbook.Worksheets.[1] :?> _Worksheet)    [3]

worksheet.Range("C2").Value2 <- "1990"                        | [4]
worksheet.Range("C2", "E2").Value2 <- [| "1990"; "2000"; "2005" |]  |

在清单 13.18 中,我们创建了 ApplicationClass 类的新实例[1],这个类型来自 Excel 命名空间,表示 Excel 这个应用程序。运行这行代码之后,应该显示一个新的 Excel 窗口。下一行[2]创建工作簿,因此,运行以后,应该看到通常的 Excel 表格。再下一行,我们获取表示工作簿中的第一个工作表(工作表显示在应用程序左下角)的对象。可以看到,我们需要把这个对象强制转换为 Worksheet 类[3],因为 Excel 编程接口(API)在很多地方是弱类型的。我们得到了这个工作表之后,就可以开始将数据写入网格,这可以使用 Range 索引器和 Value2 属性[4]实现。这个属性的类型是object,所以,可以用各种方式来使用。第一个示例将一个字符串值写到一列,第二个示例用 .NET 数组值填充范围 (一行三列)。在图 13.1 中可以看到,运行代码后创建的 Excel 工作表。

图 13.1 从 F# Interactive 中启动Excel 应用程序,以编程方式输入数据。

到目前为止,我们已经创建了想要显示的表头,下一步是填充所有剩余的信息,且最重要的,表格包含了不同年份的森林面积。清单 13.19 将数据转换成二维数组,这也是Value2 属性的有效数据源。

清单13.19 把数据导出到 Excel 工作表 (F#)

let statsArray = stats |> Array.ofSeq
let names = Array2D.init statsArray.Length 1 (fun index _ –>   [1]
  let name, _ = statsArray.[index]   | 得到二维数组中的地区名
  name )                      |

let dataArray = Array2D.init statsArray.Length 3 (fun index year –>
  let _, values = statsArray.[index]
  let yearValue = values.[year]
  yearValue / 1000000.0 )  <-- 显示为百万平方公里

let endColumn = string(statsArray.Length + 2)

worksheet.Range("B3", "B" + endColumn).Value2 <- namesVert  | 把数据写到工作表
worksheet.Range("C3", "E" + endColumn).Value2 <- tableArr    |

把数据写入到 Excel 工作表,我们可以使用基本值,比如数组或二维数组。一维数组可用于写数据行,像在第一个示例中看到的,但如果我们想要用数据填充矩阵或列,必须使用二维数组。在清单 13.19 中,我们首先创建一个二维数组,纵向保存地区名。为此,创建一个简单的数组,包含名称,然后,使用 Array2D.init 函数,将其转换为二维数组[1]。init 函数的前两个参数为数组的宽和高,再加一个函数,用于为每个坐标生成值。生成的数组仅包含一列,所以,在初始化过程中,可以忽略第二个坐标。

下一步是用地区数据生成二维数组。我们把输入序列转换成数组,还使用 Array2D.init 函数生成二维数组,以便可以使用索引。lambda 函数,每个数组单元格都执行,在函数中,首先获得地区信息,然后,找到指定年份的值,除以 100 万,使输出更方便阅读。最后,我们计算 Excel 工作表中的右边范围(取决于地区的数量),并设置数据,方法同前面的示例。

运行代码,数据应该出现在 Excel 中。因为我们运行的是 F# 脚本,因此,可以同时处理工作表,调整刚生成的表设计,结果类似于图 13.2。

图 13.2 由 F# 脚本生成的 Excel 表格,显示在过去 20 年里,世界各地森林覆盖面积的变化。

现在,有了 Excel,更容易理解数据了;还可以再进一步,用数据创建图表。这既可以手工完成,但是,用 F# 生成完整的 Excel 文件,包括图表,更容易。

时间: 2024-10-08 23:21:14

13.5.1 写数据到 Excel的相关文章

python 使用openpyxl来写数据到excel表格

使用openpyxl写execl确实很方便.我先介绍用到的相关模块与函数 Workbook:工作簿模块,在内存创建一个工作簿. ExcelWriter:使用它向exel中写数据. get_column_letter:给一个数字得到一个列名,如A,B,C 数据写入到EXCEL表格 #!/usr/bin/env python # _*_ coding:utf-8 _*_ from openpyxl.workbook import Workbook from openpyxl.writer.excel

使用Python从 MySQL写数据到Excel

直接上代码: #!/usr/bin/env python #coding:utf-8 import xlwt import MySQLdb import datetime database = MySQLdb.connect(host='192.168.1.30',user='root',passwd='123456',db='crm') #设置字符集 database.set_character_set('utf8') cursor = database.cursor() cursor.exe

Python 往Excel写数据

一.需求描述: 1.一张人员信息表中生成人员信息,某些列的字段要进行递增操作: 2.一个组织节点下存在1000人的限制要求: 3.一张Excel表格生成45000条数据: 二.Excel表格的表头如下: 三.相关操作 1.写Excel,首先需要安装xlwt模块: 2.可以采用pip的安装方式,安装方式如下图所示: 3.安装完成后,开始编写我们的程序: 首先需要明确几个函数的用法: 1.enumerate() 详细介绍: 2.format() 格式化数据 3.yield相关知识 详细介绍:http

.net 自己写的操作Excel 导入导出 类(以供大家参考和自己查阅)

由于现在网页很多都关系到Excel 的操作问题,其中数据的导入导出更是频繁,作为一个菜鸟,收集网上零散的知识,自己整合,写了一个Excel导入到GridView ,以及将GridView的数据导出到EXCEL的类方法,以供参考和方便自己以后查阅. 1 #region 引用部分 2 using System; 3 using System.Collections.Generic; 4 using System.Linq; 5 using System.Web; 6 using System.Dat

poi大数据读写excel

一.描述 前端时间写了注解方式Excel的读取和写入,它是根据注解完成Excel的操作,虽说支持大数据,但对于超大数据就无能为力了,因为它的读写期间都是将所有数据放入系统内存的,除非你有超大的内存. 因项目需要对超大数据的Excel读写操作,于是网上找了个超大数据的读写代码,这个不需要太大内存.并对此进行了简单的修改. 原理如下: Excel超大数据读取:抽象Excel2007读取器,excel2007的底层数据结构是xml文件,采用SAX的事件驱动的方法解析 xml,需要继承DefaultHa

Java实现Oracle导出数据到Excel

1.导入相应的jar包(jxl.jar 和 数据库连接的jar包) 2.写数据库连接的工具类 import java.sql.Connection;import java.sql.DriverManager;import java.sql.PreparedStatement;import java.sql.SQLException; public class Dbutil {    /*     * 功能:编写一个静态方法用于与数据库建立连接 输入参数:无 返回值:数据库连接对象     */ 

asp.net使用MVC4框架基于NPOI做导出数据到Excel表

NPOI 是 POI 项目的 .NET 版本.POI是一个开源的Java读写Excel.WORD等微软OLE2组件文档的项目. 使用 NPOI 你就可以在没有安装 Office 或者相应环境的机器上对 WORD/EXCEL 文档进行读写.NPOI是构建在POI 3.x版本之上的,它可以在没有安装Office的情况下对Word/Excel文档进行读写操作.使用 NPOI 你就可以在没有安装 Office 或者相应环境的机器上对 WORD/EXCEL 文档进行读写.NPOI是构建在POI 3.x版本

[Asp.net]常见数据导入Excel,Excel数据导入数据库解决方案,总有一款适合你!

引言 项目中常用到将数据导入Excel,将Excel中的数据导入数据库的功能,曾经也查找过相关的内容,将曾经用过的方案总结一下. 方案一 NPOI NPOI 是 POI 项目的 .NET 版本.POI是一个开源的Java读写Excel.WORD等微软OLE2组件文档的项目.使用 NPOI 你就可以在没有安装 Office 或者相应环境的机器上对 WORD/EXCEL 文档进行读写.NPOI是构建在POI 3.x版本之上的,它可以在没有安装Office的情况下对Word/Excel文档进行读写操作

C#将网页数据导出Excel时编码设置

1 public void DGToExcel() 2 { 3 Response.ClearContent(); 4 Response.Charset = "GB2312";//内容编码 5 Response.ContentType = "application/ms-excel"; 6 Response.ContentEncoding = System.Text.Encoding.GetEncoding("GB2312");//内容编码 7 R