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

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

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

但是现在客户需要支持excel格式。 因为,我需要擅长识别date,数字等等。 这在支持非统一数据types的同时:date列可能包含date格式,但也可能包含文本或其他内容。

我已经尝试了几种方法: – 保持加载string,根据预期的datetypes(ws.range(range.EntireColumn.Address).NumberFormat =“0”)预先格式化列。 它没有工作。 像往常一样加载整个块,然后强制Excel重新分配整个行以重新加载具有非文本数据types的列:

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

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

最后,我尝试修改该函数,以便它创build一个对象数组types(datetime,int,等等)。 同样,excel在解包通用对象方面速度非常慢。

我唯一的猜测是,我可以通过数据types加载块,但是用我目前的方法可怕地混乱。

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

提前致谢。

编辑:

澄清:Excel作为一个沉重的客户端,允许多个用户(每个用户都有自己的Excel)读取和更新远程数据库。 最大的问题是实际处理同时写入的表锁等。 现在的问题是,数据量越来越大,我需要做一些事情来加快进出口时间。 我已经使导出时间可以承受(大部分时间用户不会把这么多的数据上传到数据库),但是导入时间很慢,主要的瓶颈是写入电子表格。

而且,用户已经习惯了在我进来之前使用另一家公司的类似工具,所以他们非常坚持保持相同的格式。 该应用程序发送请求到一个web服务,从中下载一个CSV与信息。 然后将该CSV作为数据源加载到Excel中。 这种方法对我来说是无效的,因为我没有对数据库所在机器的pipe理权限,也没有其他任何可以用作WS的桥梁。 我只有数据库本身的pipe理权限。 我想我可以从DLL中的查询数据构buildCSV,然后使用相同的方法比他们。

如果你想在你的.NET代码中创build格式化的Excel数据文件 ,那么这是一个stream行的库的列表,可以做到这一点:

和文章从C#创buildExcel(.XLS和.XLSX)文件有更多的讨论各种选项

如果你想从Excel VBA代码更新远程数据库,然后文章VBA代码来循环和更新MS访问数据库列从Excel和这个谷歌查询:“ 网站:stackoverflow.com Excel VBA更新数据库

如果你想无形的打开一个由你的.NET后台创build的Excel数据文件 ,以便进一步处理/合并,那么文章打开Excel文件以便在没有显示的情况下使用VBA进行阅读有一些技巧,你可以怎么做

如果你想从更多的人那里得到更好的答案,那么试着将问题明确地缩小到1清晰的问题( https://stackoverflow.com/help/how-to-ask ),并提供一些Minimal,完整的和可validation的例子