Преобразовать Datatable в .xls, .xlsx, .csv по заданному разделителю во входных данных - PullRequest
0 голосов
/ 28 февраля 2019

Я хочу, чтобы метод записывал датируемые данные в .xls, .xlsx или.csv на основе ввода, предоставленного вместе с разделителем в качестве ввода

public class DataTableExtensions 
{
    /*Input Params : Datatable input 
                    fileFormat(.xls,.csv,.xlsx)
                   delimeter('\t' (tabSpace) or  ,(comma) or  | (pipe Symbol)  
                    filepath - Any local folder*/
    public void WriteToCsvFile(DataTable dataTable,string fileFormat,string delimeter, string filePath) 
    {
        //Code to convert file based on the input

       //Code to create file         
        System.IO.File.WriteAllText(filePath, fileContent.ToString());
    }
}

Ответы [ 2 ]

0 голосов
/ 01 марта 2019
    I have written this  Program to convert Xls,XLSx using console application with 
    Datatable as input and for text file I have written a simple stream writer logic.This works good. Initially I have installed package manage console  and below code 
    using expertXLs package.I am not sure wheather I can share the key of that 
    or not.Please search the key and give in config before running it


     Package Manage Console - Install-Package ExpertXls.ExcelLibrary -Version 5.0.0


     Code :
      --------

private static void GenerateTxtFileFromDataTable(DataTable sampleDataTable,string delimiter)
 {
                 var _expertxlsLK = ConfigurationManager.AppSettings["ExpertxlsLK"];
                 //GetKey Value from config

                 // Create the workbook in which the data from the DataTable will be loaded 0 for 2003 Excel(xls),1 for 2007 Excel(xlsx)
                ExcelWorkbookFormat workbookFormat = ExcelWorkbookFormat.0;

                // create the workbook in the desired format with a single worksheet
                ExcelWorkbook workbook = new ExcelWorkbook(workbookFormat);
                workbook.EnableFormulaCalculations();

                workbook.LicenseKey = _expertxlsLK;

               // get the first worksheet in the workbook
               ExcelWorksheet worksheet = workbook.Worksheets[0];

             // set the default worksheet name
              worksheet.Name = "ClaimInformation";

            // load data from DataTable into the worksheet
           worksheet.LoadDataTable(sampleDataTable, 1, 1, true);
           worksheet.Workbook.EnableFormulaCalculations();
          workbook.Save(@"M:\Rupesh\test.xlsx");
          workbook.Close();

}

0 голосов
/ 28 февраля 2019

Вы сказали, что в комментариях только 1000 строк каждые 2 часа.Это приемлемый объем данных для программы на C #.Я бы сказал, что остается большой вопрос, какой выходной формат вы используете.

. CSV - самый простой.Этот формат может быть сделан с помощью File.WriteLine () и некоторой строки.В C # нет встроенного синтаксического анализатора или средства записи CSV, но есть много стороннего кода.

. XLS требует (t) ржавого взаимодействия Office COM.Это требует установки офиса и не работает из неинтерактивного сеанса (например, службы Windows).Вдобавок ко всем нормальным проблемам с использованием COM-взаимодействия.

В существующих классах есть странная функция "экспорт в XLS", но они редки, далеко между ними и обо всем, что вы получаете,К сожалению, поскольку у нас всегда было COM Interop в качестве запасного варианта, мы так и не разработали отдельную библиотеку для работы с .XLS.По иронии судьбы работа с этим старым форматом сложнее в C # /. NET, чем в Java.

. XLSX , однако проще.Его можно записать с помощью OpenXML SDK .Или XML Writer и класс ZipArchive: по своей сути все ??? x форматы представляют собой набор файлов .XML в переименованном контейнере .ZIP.Должен быть даже сторонний код, облегчающий использование SDK.

.CSV - самый низкий общий знаменатель и, вероятно, самый простой для создания.Однако, если пользователь должен открыть этот документ, отсутствие форматирования может стать проблемой.

.XSLX будет моим выбором, если вам нужен пользователь, чтобы открыть его.

.XSL Iизбегать, как рой злых пчел.

...