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. WeX5学习笔记-02

    1.安装wex5,下载地址 http://wex5.com WeX5是绿色免安装的,解压即可直接使用.注意:不能解压到含中文.空格和特殊字符 的目录下, 例如:Program Files,是不可以的, ...

  2. java实现截图功能

    package Jietu; import java.awt.Dimension; import java.awt.Rectangle; import java.awt.Robot; import j ...

  3. C++进程间通信的十一种方法

    转载: https://www.cnblogs.com/swunield/articles/3893250.html 进程通常被定义为一个正在运行的程序的实例,它由两个部分组成: 一个是操作系统用来管 ...

  4. C#控件之ComboBox控件使用

    首先如果要给ComboBox控件输入要显示的内容,方法是点击控件会显示如下图所示: 然后点击”编辑项”,如下所示: 下面在这里输入控件要显示的内容,即可. 如果要让ComboBox控件设置默认显示项, ...

  5. ios外部链接或者app唤起自己的app

    唤起自己的app,其实都是通过链接,关于这个需要了解下scheme,自己和调用方对接下协议,这里只是说明下到自己app指定页的问题 唤起自己的app分为两种情况 一.自己的app已经启动,那么唤起自己 ...

  6. nginx和resin一二三

    最近听我们这边的开发讲解了一小下nginx和resin,现在Mark一下,可能不专业,但是对于我来说通俗易懂就好哈哈哈. 首先说服务器,服务器这个东西吧它是干啥的呢,你写的页面只能在你自己的电脑上打开 ...

  7. c++ complie link error 2019/2001

    1:没有将需要的文件添加到项目中,只是考到项目所在的目录了 2:没有添加 类导出 宏

  8. .Net memory management Learning Notes

    Managed Heaps In general it can be categorized into 1) SOH and 2) LOH.  size lower than 85K will be ...

  9. thinkphp5.0引入类

    /application/index/controller/Test.php <?php namespace app\index\controller; 当前命名空间名称 use think\C ...

  10. DEV gridview根据单元格值改变其他单元格格式

    string style = ""; private void gridView1_RowCellStyle(object sender, DevExpress.XtraGrid. ...