使用OLEDB创建xls工作表时的DataType

时间:2013-10-22 12:54:02

标签: c# asp.net sql-server excel oledb

我有一个ASP.NET 4.0 web app,可以将SQL Server 2008 R2的数据读入DataSet。现在我想将此数据写入xls文件(Office 2003)。目前,我使用CREATE TABLE创建一个空工作表,并使用insert语句逐行将数据写入其中。但我真正想要的是根据数据集中的数据类型格式化excel文件中的colunmns。例如,如果数据集中的字段是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设置阵型?我知道你不能改变颜色,字体,宽度等数据表示,但是我可以阻止单元格格式吗?

1 个答案:

答案 0 :(得分:0)

我不确定是否可以在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填写并将填充的工作表保存为其他内容。