Warning: file_get_contents(/data/phpspider/zhask/data//catemap/1/vb.net/14.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Vb.net 将大型CSV转换并加载到一个Excel文件中的多个工作表中 背景故事:_Vb.net_Visual Studio 2010_Excel_Excel 2007_Vba - Fatal编程技术网

Vb.net 将大型CSV转换并加载到一个Excel文件中的多个工作表中 背景故事:

Vb.net 将大型CSV转换并加载到一个Excel文件中的多个工作表中 背景故事:,vb.net,visual-studio-2010,excel,excel-2007,vba,Vb.net,Visual Studio 2010,Excel,Excel 2007,Vba,来自管理层的新项目:我的老板给了我一个软项目来评估我们当前的一个ETL计划,以寻找过程中的改进空间,我正在寻求指导 动机:Excel目前正在使用,由于文件大小的原因,在使用过程中经常崩溃 任务:每个月,分析师都会从调查供应商处收到一个大型csv文件,其中包含多达750列(并非所有唯一名称),超过15000行,只需将一个大型csv文件转换为excel文件,并根据csv中的列标题将七个工作表拆分。关于它是如何分解的,详情如下 我的问题是,使用VB.NET和VS2010或VBA将一个大型csv转换为一

来自管理层的新项目:我的老板给了我一个软项目来评估我们当前的一个ETL计划,以寻找过程中的改进空间,我正在寻求指导

动机:Excel目前正在使用,由于文件大小的原因,在使用过程中经常崩溃

任务:每个月,分析师都会从调查供应商处收到一个大型csv文件,其中包含多达750列(并非所有唯一名称),超过15000行,只需将一个大型csv文件转换为excel文件,并根据csv中的列标题将七个工作表拆分。关于它是如何分解的,详情如下

我的问题是,使用VB.NET和VS2010或VBA将一个大型csv转换为一个包含多个工作表的编辑excel文件会更容易或更快,还是使用excel是继续此过程的最简单方法?我是一个专家Excel用户,但我仍然是一个初级到中级的VBA、VB.NET或任何其他语言的编码新手


详细问题: 我对使用免费或开源软件持开放态度,但我最熟悉VB.NET、Excel和Excel VBA。我用类似的方法编写了一个简单的windows窗体应用程序,将csv加载到数据表中。我曾考虑将其加载到数组或2d数组中,以便更轻松地编辑列标题并找到重复的列标题。datatable选项仍然给我留下了更多的问题而不是答案,因为我需要唯一的列标题,如果我要立即编写一个excel文件,我不确定是否应该使用datatable。我尝试过在头名称重复的文件上不工作。我觉得好像我有作家块,因为我不知道我应该采取哪个方向来处理这样一个过程。非常感谢您提供的任何意见,如果这个问题没有一个明确的最佳答案,我深表歉意,谢谢


使用excel的当前分析任务 当前的分析计划要求分析师在excel中打开csv,在第1行上方插入一行,并根据单独工作表上的简单两列查找表,使用vlookup将“新”列名替换为“旧”列名。比如说

New becomes Old
"org-name" becomes "org_name" or 
"item_1_Vendor" becomes "item_1" or
"date-created_Survey" becomes "date_created"
etc...checking all sent "New" columns against the list of all possible 750 columns.
然后他们粘贴第一行的值,然后删除第二行,其中包含我们要更改的新标题

然后,分析员必须修复文件上名为“sid”的主键。 测量ID字段(sid)应为数据文件的每一行指定一个编号。有时sid显示在sid_HCAHPS或sid_CGCAHPS字段下。 分析员会在“sid”字段旁边插入一列,并在其中放入如下公式,例如:
=IF(BE2“”、BE2、IF(RD2“”、RD2、IF(UH2“”、UH2“”))
实际单元格引用可能会更改,但在示例excel公式中

"sid"=Range("BE2")
"sid_HCAHPS"=Range("RD2")
"sid_CGCAHPS"=Range("UH2")
一旦创建了新的主键列并且没有空格,我们就可以删除原始的“sid”列

下一步是检查列,因为可能存在冗余的HCAHPS列部分(由于发送了第二次调查,然后返回-编码为Wave 2),请通过“语言”删除第二组列“sid_HCAHPS”

接下来是最大的改动,因为我们已经建立了一个系统,在该系统中,我们将这些信息以七张工作表excel文件的形式发送给数据库管理员,由MS Access查询加载,该查询从每个工作表中创建一个表,并加载到我们专有的商业智能软件中。全部完成


您的问题是,“VB.net能自动执行我们当前的分析任务吗?”-如果可以,那么是的

您可以使用streamreader类从csv获取数据 ()

然后将其存储在您提到的数组中,或者使用*list类 ()

存储完所有数据后,您将需要自动化excel,这非常简单,但这里有一个链接可以让您开始使用该功能:

  • 使用list类,您可以使用类或结构创建自定义对象的列表。例如
我们定义了一个结构:

Structure rowOfData
    Public intPrimaryKey as Integer
    Public strIceCreamName as String
    Public decPrice as Decimal
End Structure
然后,我们可以创建一行数据并向其中添加属性:

Dim iceCream1 as rowOfData
iceCream1.intPrimaryKey = 1
iceCream1.strIceCreamName = "Mr Whippy"
iceCream1.decPrice = 0.99
我们创建一个包含以下内容的列表:

Dim listOfIceCreams as New List(of rowOfData)
再加上如下:

listOfIceCreams.Add(iceCream1)
listOfIceCreams.Add(iceCream2)
etc.
listOfIceCreams(0).decPrice 'gives us the price of the ice Cream that was added to the list first.
并按如下方式访问列表中的成员:

listOfIceCreams.Add(iceCream1)
listOfIceCreams.Add(iceCream2)
etc.
listOfIceCreams(0).decPrice 'gives us the price of the ice Cream that was added to the list first.

还有很多其他有用的方法,列表中有而数组中没有。您可以通过msdn列表类链接查看是否有任何您可能需要的东西出现

我觉得这个CSV文件真的应该首先加载到访问表中(因为这是处理此类大量数据的更好工具),然后运行各种查询(如果需要,还可以访问VBA)把它分成七张桌子。如果由于某种原因,这是不可能的,那么ExcelVBA肯定能够完成这项工作。我不能为VB.NET说话,我从来没有在Excel工作中使用过它。使用access的问题是每个表限制256列。所以文件在被切碎之前无法加载到表中。我知道了,我不知道Access有那个限制。我认为VBA可以自动执行上述步骤,而且可能比VB.NET更易于使用,因为VBA可以直接在Excel中工作,而Excel似乎就是所有工作的地方。实际上,15000*750=1130万个单元格。Excel完全可以处理这些问题。如果任何代码运行非常慢或崩溃,那是因为它可能写得不太好。每个范围操作都有开销,因此不要循环单元格等。对于如此多的行和列,尽量不要处理工作表(插入列等),而是处理内存中数组或集合中的数据,在单个操作中将最终产品输出到工作表,或者至少一次处理列,不是细胞,通过RangeOfCells.Value/Formula=等等@Scheballs,我感觉到了你的痛苦——我真的把头撞到了桌子上