背景故事:
来自管理层的新项目:我的老板给了我一个软项目,以评估我们当前的 ETL 计划之一,以在流程中寻找改进空间,我正在寻求指导。
动机:由于文件大小,当前正在使用 Excel,并且在此过程中经常崩溃。
任务:分析师每个月都会收到来自调查供应商的大型 csv 文件,其中包含多达 750 列(并非所有唯一名称),超过 15,000 行,只需将大型 csv 文件转换为 excel 文件,其中包含根据列分解的七个工作表csv 中的标题。下面是如何分解的详细信息。
我的问题是使用 VB.NET 和 VS2010 或 VBA 将一个大型 csv 转换为具有多个工作表的编辑过的 excel 文件,或者使用 Excel 是继续此过程的最简单方法吗?我是 Excel 专家用户,但我仍然是 VBA、VB.NET 或任何其他语言编码的初学者。
详细问题:
我愿意使用免费或开源软件,但我最熟悉 VB.NET 和 Excel 以及 Excel-VBA。我已经使用类似的TextFieldParser 代码对一个简单的 Windows 窗体应用程序进行了一些编码,以将 csv 加载到数据表中。我曾考虑将其加载到数组甚至二维数组中,以便更轻松地编辑列标题并找到重复的列标题。数据表选项仍然给我留下了比答案更多的问题,因为我需要唯一的列标题,并且如果我要立即编写一个 Excel 文件,我不确定是否应该使用数据表。我从 CodeProject 尝试了 CSVreader不适用于具有重复标题名称的文件。我觉得好像我被作家阻止了,因为我不确定我应该采取哪个方向来处理这样的过程。您可以提供的任何输入将不胜感激,如果这个问题没有一个单一且清晰的最佳答案,我深表歉意,谢谢。
当前使用 excel 的 Analyst 任务
当前的分析计划已表示分析师在 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 Query 加载,该查询从加载到我们专有的每个工作表中创建一个表商业智能软件。全部完成!!