使用 OLEDB 创建 xls 工作表时的数据类型

本文关键字:数据类型 工作 OLEDB 创建 xls 使用 | 更新日期: 2023-09-27 18:36:33

我有一个ASP.NET 4.0 web app,它可以将数据从SQL Server 2008 R2读取到DataSet中。现在,我想将此数据写入xls文件 (Office 2003)。目前,我使用 CREATE TABLE 创建一个空工作表,并使用 insert 语句将数据逐行写入其中。但我真正想要的是 excel 文件中的列词根据数据集中的 datatyp 进行格式化。例如,如果数据集中的字段是 system.decimal 类型,我希望 excel 中的相应列格式化为小数。

到目前为止,我已经在我的CREATE TABLE statement中尝试了不同的数据类型。我尝试SQL datatypes(int,bigint,money,datetime,bit,nvarchar和xml是我的数据库使用最多的),我也尝试了几种Excel-specific datatypes以及几种OleDB特定的方法,但没有成功。数据将写入文件,但列的格式仍为默认值。

一些详细信息:

String AceConnectionString = "Provider=Microsoft.ACE.OLEDB.12.0;Data Source=" + filename + "; Extended Properties='"Excel 8.0; HDR=YES; IMEX=0; READONLY=FALSE;'""; //filename is the target xls file
**example CREATE TABLE statement (with SQL datatypes for the fields)**
CREATE TABLE [Report22.10.2013 14:45] ([IDKatalog] Int, [KatalogName] NVarChar(255), [Tabellenname] NVarChar(255), [KomplettUpdate] Bit, [IDLieferant] Int, [FreigabeVon] NVarChar(255), [FreigabeVonEMail] NVarChar(255), [IDKatalogAS] Int)

是否可以使用OLEDB设置阵型?我知道您无法更改颜色、字体、宽度等数据表示形式,但我可以确定单元格格式吗?

使用 OLEDB 创建 xls 工作表时的数据类型

我不确定是否可以在OLEDB中执行此操作,但肯定可以使用Powershell或VBA来完成。以下来自Microsoft的参考。

Worksheets("Sheet1").Range("A17").NumberFormat = "General"
Worksheets("Sheet1").Rows(1).NumberFormat = "hh:mm:ss"
Worksheets("Sheet1").Columns("C"). _
NumberFormat = "$#,##0.00_);[Red]($#,##0.00)"

http://msdn.microsoft.com/en-us/library/office/aa224873%28v=office.11%29.aspx

如果不想使用 Powershell,还可以尝试使用已输入的正确格式信息预制模板文件,然后让 OLEDB 填写该信息并将填充的工作表另存为其他内容。