csv 文件是文本文件类型,但是打开csv 文件后(默认使用本地已经安装的excel 来打开excel 文件),默认显示出来的是general 类型(column data format)的数据,

这样就有一个问题:如果csv 文件中单元格里存储的是这样的数据:00012345,那么在excel 中现实的确是:12345.

当然,如果使用 TXT来打开csv 文件的话,是可以正常现实出来"00012345" 的。

所以需求就是如何将csv文件中中的数据导出到excel 中(因为excel 可以有格式化的功能,将某列的 column data format设置为Text,而不是默认的General; 而csv 文件则没有类似格式化的功能),同时如果原来的csv 文件中有巨量 数据(超过100 万条记录)。

具体做法:

  逐行读取csv 文件,保存到一个多维数组中,然后将数组赋值给excel.

 public void Main()
{ string fileName = this.ReadVariable("source_csv_file_path").Value.ToString(); // 定义数组的最大容量
int totalRecords = 300000; string excelFileName = fileName.Replace(".csv", ".xlsx"); // 新建excel文件 Microsoft.Office.Interop.Excel.Application statusExcel = new Microsoft.Office.Interop.Excel.Application(); Workbook statusWorkbook = statusExcel.Application.Workbooks.Add(true);
try
{ Worksheet wsStatusSheet = (Worksheet)statusWorkbook.Worksheets.Add(statusWorkbook.Sheets[1], Type.Missing, Type.Missing, Type.Missing); ((Worksheet)statusWorkbook.Sheets["Sheet1"]).Delete(); wsStatusSheet.Name = "destinationExcelFile"; // 原来的CSV 中有5列,比如现在需要设置excel中第一列的 column data format为Text Range firstHeaderRow = wsStatusSheet.get_Range("A1:E1", System.Type.Missing); Range statusSheetSSNColumn = wsStatusSheet.get_Range("A:A", System.Type.Missing);
statusSheetSSNColumn.EntireColumn.Cells.NumberFormat = "@"; int excelCurrRow = 0; // 逐行读取csv文件
using (FileStream fs = new FileStream(fileName, FileMode.Open, FileAccess.Read))
{
StreamReader reader = new StreamReader(fs, System.Text.Encoding.UTF8);
string line = ""; string[] colArray = null;
object[,] cellData = new object[totalRecords, 5];
while ((line = reader.ReadLine()) != null)
{
colArray = line.Split('\t'); for (int iCol = 0; iCol < 5; iCol++)
{
cellData[excelCurrRow, iCol] = colArray[iCol];
}
excelCurrRow++;
} // 将数组cellData[,]中的值批量赋给excel
wsStatusSheet.get_Range(wsStatusSheet.Cells[1, 1], wsStatusSheet.Cells[excelCurrRow, 5]).set_Value(Type.Missing, cellData);
} // 保存excel
object missing = System.Reflection.Missing.Value; statusWorkbook.SaveAs(excelFileName, XlFileFormat.xlOpenXMLWorkbook, missing, missing, false, false, XlSaveAsAccessMode.xlNoChange,
XlSaveConflictResolution.xlUserResolution, true, missing, missing, missing); statusWorkbook.Close(null, excelFileName, null);
statusExcel.Quit(); Dts.TaskResult = (int)ScriptResults.Success;
}
catch (Exception ex)
{
statusWorkbook.Close(null, excelFileName, null);
statusExcel.Quit();
}
}

最终生成的excel 中的内容类似这样:

代码 名称 类别 日期 产地
0018338152 苹果 水果 20190124 烟台
0018338160 梨子 水果 20190124 莱阳
0018338186 水杯 家居用品 20190124 广东珠海
0018338228 小米手机 电子产品 20190124 北京
0018338236 荣耀手表 电子产品 20190124 上海

SSIS 中将csv 文件批量导出到excel 文件,并设置excel 文件中某些列的data column format 为Text的更多相关文章

  1. asp.net将页面内容按需导入Excel,并设置excel样式,下载文件(解决打开格式与扩展名指定的格式不统一的问题)

    //请求一个excel类 Microsoft.Office.Interop.Excel.ApplicationClass excel = null; //创建 Workbook对象 Microsoft ...

  2. Laravel 5 中使用 Laravel Excel 实现 Excel/CSV 文件导入导出功能

    1.简介 Laravel Excel 在 Laravel 5 中集成 PHPOffice 套件中的 PHPExcel,从而方便我们以优雅的.富有表现力的代码实现Excel/CSV文件的导入和导出. 该 ...

  3. 【Python】通过python代码实现demo_test环境的登录,通过csv/txt/excel文件批量添加课程并开启课程操作--(刚开始 项目 页面 模块 元素这种鸟 被称作pageobject 等这些搞完 然后把你的定位器、数据 和脚本在分离 就是传说中那个叫数据驱动 的鸟)

    一.1.通过csv文件批量导入数据 1 from selenium import webdriver from time import ctime,sleep import csv #循环读取每一行每 ...

  4. 在 Laravel 5 中使用 Laravel Excel 实现 Excel/CSV 文件导入导出功能

    1.简介 Laravel Excel 在 Laravel 5 中集成 PHPOffice 套件中的 PHPExcel ,从而方便我们以优雅的.富有表现力的代码实现Excel/CSV文件的导入和 导出  ...

  5. excel批量转换为CSV格式,xls批量导出csv格式

    工具/原料   excel 2013 地址链接:http://pan.baidu.com/s/1c1ZABlu 密码:d3rc 方法/步骤     首选我们把需要导出为CVS的Excel文件整理集中到 ...

  6. Laravel 5使用Laravel Excel实现Excel/CSV文件导入导出的功能详解

    1.简介 本文主要给大家介绍了关于Laravel 5用Laravel Excel实现Excel/CSV文件导入导出的相关内容,下面话不多说了,来一起看看详细的介绍吧. Laravel Excel 在 ...

  7. java使用POI操作excel文件,实现批量导出,和导入

    一.POI的定义 JAVA中操作Excel的有两种比较主流的工具包: JXL 和 POI .jxl 只能操作Excel 95, 97, 2000也即以.xls为后缀的excel.而poi可以操作Exc ...

  8. NPOI操作EXCEL(四)——反射机制批量导出excel文件

    前面我们已经实现了反射机制进行excel表格数据的解析,既然有上传就得有下载,我们再来写一个通用的导出方法,利用反射机制实现对系统所有数据列表的筛选结果导出excel功能. 我们来构想一下这样一个画面 ...

  9. 使用存储过程将Oracle数据批量导出为多个csv文件

    数据库有如下表结构: user_info (   user_id           NUMBER primary key,   user_name     VARCHAR2(200) NOT NUL ...

随机推荐

  1. 关于Hibernate级联更新插入信息时提示主键不为空的问题“org.hibernate.StaleStateException: Batch update returned unexpected row count from update: 0 actual row count: 0 expected: 1 ”

    org.hibernate.StaleStateException: Batch update returned unexpected row count from update: 0 actual ...

  2. c++ 集合的增删改查,与两集合的合并 缺陷(空间大小不灵活)

    #if 1 #include <iostream> #include <stdlib.h> using namespace std; class List { public: ...

  3. FreeCAD_DWG文件格式支持

    FreeCAD 是一款开源的三维模型制作软件,体积小.功能强大,可结合软件包划分网格进行有限元分析,上手速度极快.但也存在问题,即软件自身不支持DWG文件格式.本文介绍 FreeCAD 支持 DWG格 ...

  4. 面试知识点准备-C++常见问题

    博客园写写格式简单的文章还行,格式一复杂就不行了,可能是我不会用吧,我有强迫症,有道云格式很好用,以后去有道写这种东西了 有道云笔记链接:http://note.youdao.com/noteshar ...

  5. Spring AOP选择切点的问题

    先上代码: /** * 管理员登录方法的切入点 */ @Pointcut("execution(* com.arch.shiro.realm.UserRealm.doGetAuthentic ...

  6. 异常详细信息: System.BadImageFormatException: 未能加载文件或程序集“Maticsoft.Common”或它的某一个依赖项。试图加载格式不正确的程序。

    异常详细信息: System.BadImageFormatException: 未能加载文件或程序集“Maticsoft.Common”或它的某一个依赖项.试图加载格式不正确的程序. 解决方法: 点击 ...

  7. 软件测试_Fiddler抓包工具二

    多数资料摘至:https://www.cnblogs.com/nihaorz/p/5455148.html Fiddler 的命令使用 如何打开命令行:左下方的小黑条命令行,点击它就可以输入命令了(a ...

  8. ctrl+c以及写操作失败和flush

    .kill命令可以带信号号码选项,也可以不带.如果没有信号号码,kill命令就会发出终止信号(15),这个信号可以被进程捕获,使得进程在退出之前可以清理并释放资源.也可以用kill向进程发送特定的信号 ...

  9. KendoUI 自定义CheckBoxList

    不多说直接上代码 CSS完整代码: .e-selectboxs-container { display: table; } .e-selectbox { min-width: 100px; heigh ...

  10. Python基础:四、python的优缺点

    python是一门动态解释性的强类型语言 python的优点: 1. python的定位是"优雅"."明确"."简单" python程序看上 ...