Выгрузка 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);
    }
}

ИИ поможет Вам:


  • решить любую задачу по программированию
  • объяснить код
  • расставить комментарии в коде
  • и т.д
Попробуйте бесплатно

Оцени полезность:

6   голосов , оценка 4.333 из 5