将大量数据从.NET对象加载到Excel

时间:2014-10-06 16:38:05

标签: .net excel vba

我正在使用excel作为其接口的数据库应用程序。从本质上讲,它是一个通过.NET库连接到数据库的excel宏。

主要问题是客户需要能够管理大量数据(5000-20000行,约160列)。我设法最小化数据库访问的延迟,并将整个数据块作为字符串直接加载到电子表格范围.Value属性(格式化为字符串[]) 。它快速,简单,高效。

但现在客户需要支持excel格式。因为,我需要excel来识别日期,数字本身,等等。这支持非统一数据类型:日期列可能包含日期格式,但也可能包含文本或其他内容。

我尝试了几种方法: - 保持加载字符串,根据预期的日期类型(ws.range(range.EntireColumn.Address).NumberFormat =" 0")预格式化列。它没有用。 - 像往常一样加载整个块,然后通过重新分配整行来强制Excel重新加载具有非文本数据类型的列:

With ws.range(ws.Cells(4, 11), ws.Cells(ws.UsedRange.rows.Count, 11))
    .NumberFormat = "dd/mm/yyyy"
    .Value = .Value
End With

但是当我需要在大约7000行左右的文档上重新格式化30列时,这个开始变得很慢。

- 最后,我尝试修改该函数,以便创建一个对象[]数组,其元素采用正确的数据类型(datetime,int等)。同样,excel在解包通用对象时非常缓慢。

我唯一的猜测是我可以通过数据类型加载块,但是这与我当前的方法非常混乱。

有没有其他方法可以提高速度或减少转换?

提前致谢。

编辑:

澄清一下:excel充当了一个繁重的客户端,允许多个用户(每个用户都有自己的excel)读取和更新远程数据库。最大的问题实际上是处理同时写入的表锁等。现在的问题是数据量越来越大,我需要做些什么来加快导入和导出时间。我已经使出口时间变得可以忍受(大多数时候用户不会将那么多数据上传到数据库),但导入时间很慢,而且主要的瓶颈是写入电子表格。

此外,在我进入之前,用户已经习惯了他们从另一家公司使用的类似工具,所以他们非常坚持保持相同的格式。该应用程序向Web服务发送请求,从该服务器下载带有该信息的CSV。然后将CSV作为数据源加载到excel中。这种方法对我无效,因为我没有对DB所在机器的管理访问权限,也没有任何其他我可以用作WS的桥梁的方法。我只拥有数据库本身的管理权限。我想我可以从dll中查询的数据构建CSV,然后使用与它们相同的方法。

1 个答案:

答案 0 :(得分:0)

如果您想在.NET代码中创建格式化的Excel数据文件,那么这是可以执行此操作的常用库列表:

文章Create Excel (.XLS and .XLSX) file from C#对各种选项进行了较长时间的讨论

如果您想从Excel VBA更新远程数据库代码,那么文章VBA code to loop and update MS access database column from Excel和此Google查询:&#34; site:stackoverflow.com excel vba update database < / EM>&#34;

如果您希望无形地打开.NET后端创建的Excel数据文件以进行进一步处理/合并,那么文章Open Excel file for reading with VBA without display会提供一些提示,了解如何使用

如果您希望从更多人那里获得更好的答案,请尝试将问题明确缩小为1个明确问题(https://stackoverflow.com/help/how-to-ask),并以{{{{}}的形式提供一些代码3}}