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. windows与sql身份登录

    windows身份验证:1.“.”代表本地2.127.0.0.1代表本地3.本地ip地址,在dos中可查4.localhost代表本地 sql身份验证:首先用windows登上去,之后再安全性中找到登 ...

  2. tp5 删除服务器文件

    public function test(){ //ROOT_PATH . 'public' . DS . 'uploads' $filename = ROOT_PATH . 'public' . D ...

  3. Csrf_token ||| CSRF跨站请求伪造

    # 注: 部分内容参考网上,侵删   CSRF(Cross-site request forgery) 跨站请求伪造,是一种对网站的恶意利用  它会通过伪装成受信任用户的请求来利用受信任的网站来获取一 ...

  4. 理解JavaScript中的属性描述符

    我们把描述JavaScript中定义内部特性的属性叫做属性描述符 分为两大类:数据描述符和存取描述符 数据描述符是一个拥有可写或不可写的属性(Writable); 存取描述符不包含数据值,是一组拥有g ...

  5. exp迁移测试库10.2.0.5

    目的: 将一套10.2.0.5的UP-UNIX系统的数据,迁移到一台Windows环境下. 迁移方案:由于不同的操作系统,为了方便迁移,只是测试,使用EXP/IMP方式. 迁移流程: 一.源端导出 1 ...

  6. ArcMap复制粘贴问题

    ArcMap 10.2能进行复制,但是不能进行粘贴的问题: 前几天用朋友的ArcMap10.2时,偶然发现在编辑数据的时候,需要在不同的shp层之间操作,往往有时候可以复制,但是粘贴那一项是灰色的,经 ...

  7. vue打包后接口报错

    最近自己和朋友做了一个小的项目,用的是vue3.x版本,本地dev运行的时候接口什么的都是正常的,但是build打包后本地使用anywhere启动一个本地服务的时候发现接口报错405状态,发布到线上接 ...

  8. MVC中调用模态框之后导致JS失效

    今天在工作中碰到一个页面调用模态框之后,页面原来的JS失效的问题,由于前台经验较少,折腾了一天... 问题描述是这样,在页面,有两个下拉列表框A和B,做了下拉列表框联动,有一个button按钮会调用模 ...

  9. JVM垃圾收集器-G1收集器

    G1收集器是当前收集器技术发展的最前沿成果,在JDK1.6_Updata14中提供了Early Access版本的G1收集器以供适用.G1收集器是垃圾收集器理论进一步发展的产物,它与前面的CMS收集器 ...

  10. 2.3 i++/i--与++i/--i的运算

    一.i++/i--: i先参与运算,运算完成后自加/减1: public class Test{ public static void main(String[] args){ // [1] ; i+ ...