Выгрузка CSV в Excel - C#
Формулировка задачи:
Есть файл txt в нем данные в формате csv. Если этот файл открывать с помощью Excel c разделителем "," то данные довольно быстро преобразуются и сохраняются. Получается около 200000 строк. А если программным образом парсить txt, записать в DataTable а потом его вставить в Excel с помощью microsoft.interop.office.excel по ячейке или с помощью Open XML SDK 2.0 целым массивом выгружает просто капец как долго. Помогите с данной проблемой разобраться.
Пример данных в файле:
cdrRecordType,globalCallID_callManagerId,globalCallID_callId,origLegCallIdentifier,dateTimeOrigination,origNodeId,origSp an,origIpAddr,callingPartyNumber,callingPartyUnicodeLoginUserID,origCause_location,origCause_value,origPrecedenceLevel,o rigMediaTransportAddress_IP,origMediaTransportAddress_Port,origMediaCap_payloadCapability,origMediaCap_maxFramesPerPacke t,origMediaCap_g723BitRate,origVideoCap_Codec,origVideoCap_Bandwidth,origVideoCap_Resolution,origVideoTransportAddress_I P,origVideoTransportAddress_Port,destLegIdentifier,destNodeId,destSpan,destIpAddr,originalCalledPartyNumber,finalCalledP artyNumber,finalCalledPartyUnicodeLoginUserID,destCause_location,destCause_value,destPrecedenceLevel,destMediaTransportA ddress_IP,destMediaTransportAddress_Port,destMediaCap_payloadCapability,destMediaCap_maxFramesPerPacket,destMediaCap_g72 3BitRate,destVideoCap_Codec,destVideoCap_Bandwidth,destVideoCap_Resolution,destVideoTransportAddress_IP,destVideoTranspo rtAddress_Port,dateTimeConnect,dateTimeDisconnect,lastRedirectDn,pkid,originalCalledPartyNumberPartition,callingPartyNum berPartition,finalCalledPartyNumberPartition,lastRedirectDnPartition,duration,origDeviceName,destDeviceName,origCallTerm inationOnBehalfOf,destCallTerminationOnBehalfOf,origCalledPartyRedirectOnBehalfOf,lastRedirectRedirectOnBehalfOf,origCal ledPartyRedirectReason,lastRedirectRedirectReason,destConversationId,globalCallId_ClusterID,joinOnBehalfOf,comment,authC odeDescription,authorizationLevel,clientMatterCode,callSecuredStatus,origConversationId
1,1,1407180,20907662,1317405911,1,0,-1777336310,365,\ ,0,0,4,-1777336310,23200,2,20,0,0,0,0,0,0,20907663,1,20907663,50200586,93705169,93705169,\ ,0,16,4,50200586,16488,2,20,0,0,0,0,0,0,1317405920,1317405955,93705169,10117804-4885-443f-9b32-b436364f8487,City and V-Pyshma,Internal,City and V-Pyshma,City and V-Pyshma,35,SEP0021553DEC2B,10.0.254.2,0,12,0,0,0,0,0,StandAloneCluster,0,,,0,,0,0
1,1,1407181,20907687,1317412210,1,0,625016842,566,\ ,0,16,4,625016842,26686,2,20,0,0,0,0,0,0,20907688,1,20907688,50200586,93705168,93705168,\ ,0,0,4,50200586,18942,2,20,0,0,0,0,0,0,1317412224,1317412229,93705168,0d04ab77-9ea4-4aa4-a1f6-a18d7f586592,City and V-Pyshma,Internal,City and V-Pyshma,City and V-Pyshma,5,SEPACA0166F324C,10.0.254.2,12,0,0,0,0,0,0,StandAloneCluster,0,,,0,,0,0
1,1,1407182,20907691,1317412780,1,0,-1777336310,365,\ ,0,16,4,-1777336310,20416,2,20,0,0,0,0,0,0,20907692,1,20907692,50200586,93705169,93705169,\ ,0,0,4,50200586,18572,2,20,0,0,0,0,0,0,1317412784,1317412790,93705169,12761a9c-6a57-4e43-a091-b21402840ccf,City and V-Pyshma,Internal,City and V-Pyshma,City and V-Pyshma,6,SEP0021553DEC2B,10.0.254.2,12,0,0,0,0,0,0,StandAloneCluster,0,,,0,,0,0
1,1,1407183,20907718,1317420140,1,0,625016842,566,\ ,0,16,4,625016842,32406,2,20,0,0,0,0,0,0,20907719,1,20907719,50200586,93705168,93705168,\ ,0,0,4,50200586,19276,2,20,0,0,0,0,0,0,1317420150,1317420155,93705168,9bd7bd1f-cd44-4410-a546-37cb35a7ea93,City and V-Pyshma,Internal,City and V-Pyshma,City and V-Pyshma,5,SEPACA0166F324C,10.0.254.2,12,0,0,0,0,0,0,StandAloneCluster,0,,,0,,0,0
1,1,1407185,20907747,1317427125,1,0,625016842,566,\
1. С помощью библиотеки LumenWorks.Framework.IO.Csv считываю данные из txt файла
2. Загружаю дынные в DataTable
3. С помощью библиотеки ExtremeML (сделана на базе Open XML SDK 2.0) загружаю данные в Excel
private void unloadToExcel_Click(object sender, EventArgs e) { DataTable dataTable; if (filePath.Text == "") {MessageBox.Show("Файл не выбран", "Ошибка", MessageBoxButtons.OK, MessageBoxIcon.Error); return;} string textStream = File.ReadAllText(filePath.Text); using (CachedCsvReader csv = new CachedCsvReader(new StringReader(textStream), true)) { using (DataTable dt = GetDataTable(csv)) { dataTable = dt; } } System.IO.File.Copy(@"CiscoReportTemplate.xlsx", path, true); using (var pakege = SpreadsheetDocumentWrapper.Open(path)) { var table = pakege.WorkbookPart.GetTablePart("CiscoData").Table; table.Fill(dataTable); } }
Решение задачи: «Выгрузка CSV в Excel»
textual
Листинг программы
using System; using System.Data; using System.Data.OleDb; using System.Data.Odbc; using Microsoft.Win32; class Program { public static void Main(string[] args) { const string keyPath = @"HKEY_LOCAL_MACHINE\SOFTWARE\Microsoft\Jet\4.0\Engines\Text"; const string keyName = "Format"; string oldValue = (string)Registry.GetValue(keyPath, keyName, string.Empty); Registry.SetValue(keyPath, keyName, "Delimited(,)"); var connect = new OleDbConnection("Provider=Microsoft.Jet.OLEDB.4.0;Data Source=C:\\csv\\;" + "Extended Properties=\"text;HDR=Yes;FMT=Delimited\";"); connect.Open(); var adapter = new OleDbDataAdapter("SELECT * FROM csv.txt", connect); DataSet dataSet = new DataSet(); adapter.Fill(dataSet, "csv"); for(int i = 0; i < dataSet.Tables[0].Rows.Count; i++) Console.WriteLine(string.Format("{0, 4} {1}", dataSet.Tables[0].Rows[i][0], dataSet.Tables[0].Rows[i][1])); connect.Close(); Registry.SetValue(keyPath, keyName, oldValue); Console.ReadKey(true); } }
ИИ поможет Вам:
- решить любую задачу по программированию
- объяснить код
- расставить комментарии в коде
- и т.д