SSIS 中将csv 文件批量导出到excel 文件,并设置excel 文件中某些列的data column format 为Text
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的更多相关文章
- asp.net将页面内容按需导入Excel,并设置excel样式,下载文件(解决打开格式与扩展名指定的格式不统一的问题)
//请求一个excel类 Microsoft.Office.Interop.Excel.ApplicationClass excel = null; //创建 Workbook对象 Microsoft ...
- Laravel 5 中使用 Laravel Excel 实现 Excel/CSV 文件导入导出功能
1.简介 Laravel Excel 在 Laravel 5 中集成 PHPOffice 套件中的 PHPExcel,从而方便我们以优雅的.富有表现力的代码实现Excel/CSV文件的导入和导出. 该 ...
- 【Python】通过python代码实现demo_test环境的登录,通过csv/txt/excel文件批量添加课程并开启课程操作--(刚开始 项目 页面 模块 元素这种鸟 被称作pageobject 等这些搞完 然后把你的定位器、数据 和脚本在分离 就是传说中那个叫数据驱动 的鸟)
一.1.通过csv文件批量导入数据 1 from selenium import webdriver from time import ctime,sleep import csv #循环读取每一行每 ...
- 在 Laravel 5 中使用 Laravel Excel 实现 Excel/CSV 文件导入导出功能
1.简介 Laravel Excel 在 Laravel 5 中集成 PHPOffice 套件中的 PHPExcel ,从而方便我们以优雅的.富有表现力的代码实现Excel/CSV文件的导入和 导出 ...
- excel批量转换为CSV格式,xls批量导出csv格式
工具/原料 excel 2013 地址链接:http://pan.baidu.com/s/1c1ZABlu 密码:d3rc 方法/步骤 首选我们把需要导出为CVS的Excel文件整理集中到 ...
- Laravel 5使用Laravel Excel实现Excel/CSV文件导入导出的功能详解
1.简介 本文主要给大家介绍了关于Laravel 5用Laravel Excel实现Excel/CSV文件导入导出的相关内容,下面话不多说了,来一起看看详细的介绍吧. Laravel Excel 在 ...
- java使用POI操作excel文件,实现批量导出,和导入
一.POI的定义 JAVA中操作Excel的有两种比较主流的工具包: JXL 和 POI .jxl 只能操作Excel 95, 97, 2000也即以.xls为后缀的excel.而poi可以操作Exc ...
- NPOI操作EXCEL(四)——反射机制批量导出excel文件
前面我们已经实现了反射机制进行excel表格数据的解析,既然有上传就得有下载,我们再来写一个通用的导出方法,利用反射机制实现对系统所有数据列表的筛选结果导出excel功能. 我们来构想一下这样一个画面 ...
- 使用存储过程将Oracle数据批量导出为多个csv文件
数据库有如下表结构: user_info ( user_id NUMBER primary key, user_name VARCHAR2(200) NOT NUL ...
随机推荐
- Ajax的分析
I.what is Ajax? Ajax 即“Asynchronous Javascript And XML”(异步 JavaScript 和 XML),是指一种创建交互式网页应用的网页开发技术. A ...
- Nginx+Tomcat配置负载均衡(一)
关于负载均衡原理方面的知识点不在本文讨论范畴,本文主要就负载均衡配置过程中的细节部分配置做详细说明. 本次负载均衡大致的配置如下: 环境 : WIN7 + VM虚拟机3台(centos6.5) Ngi ...
- 从零开始写自己的PHP框架系列教程[前言]
我觉得程序员进步的理由:多看->多写->多总结 我自我介绍下,我不是程序员,但是我爱编程,作为业余程序员自己写框架让人感到兴奋的,目前有很多框架(js有jQuery.Express.soc ...
- React-redux深入理解
首先,一张 Redux 解释图镇楼: [回顾]Redux 的核心: store 是什么?(createStore 函数的实现) const store = createStore(reducer); ...
- c语言设计实验报告
试验项目:1.字符与ASCLL码 2.运算符与表达式的运用 3.顺序结构应用程序 4.数学函数的算法描述 5.鸡兔同笼的算法描述 6.确定坐标的算法描述 姓名:熊承启 实验地点:514实验室 1.字符 ...
- 2.3 i++/i--与++i/--i的运算
一.i++/i--: i先参与运算,运算完成后自加/减1: public class Test{ public static void main(String[] args){ // [1] ; i+ ...
- 16.python-I/O模型
一.事件驱动模型1.什么是事件驱动模型:本身是一种编程范式,这里程序的执行是由外部事件来决定的.它的特点是包含一个事件循环,当外部事件发生时使用回调机制来触发相应的处理.常见的编程范式(单线程)同步以 ...
- 【OO学习】OO第一单元作业总结
OO第一单元作业总结 在第一单元作业中,我们只做了一件事情:求导,对多项式求导,对带三角函数的表达式求导,对有括号嵌套的表达式求导.作业难度依次递增,让我们熟悉面向对象编程方法,开始从面向过程向面向对 ...
- 在ubuntu服务器上安装tomcat 9
前提条件: 确保ubuntu服务器上 已经安装 java 8 或更高版本,安装java8可以参考我的另一篇博文 通过 ppa 在ubuntu server 上安装java 8 java -versio ...
- unity 面试题(答案)
一.什么是渲染管道?是指在显示器上为了显示出图像而经过的一系列必要操作.渲染管道中的很多步骤,都要将几何物体从一个坐标系中变换到另一个坐标系中去.主要步骤有:本地坐标->视图坐标->背面裁 ...