通过输入中给定的分隔符将数据表转换为.xls,.xlsx,.csv

时间:2019-02-28 03:16:39

标签: c# file-io console-application export-to-csv export-to-excel

我想要一种基于提供的输入以及分隔符作为输入将数据表数据写入.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 :(得分:0)

您说评论中每2小时只有1000行。对于C#程序来说,这是可接受的数据量。我会说剩下的最大问题是您使用的输出格式。

CSV 是最简单的一种。这种格式可以通过File.WriteLine()和一些字符串来实现。我知道在C#中没有CSV解析器或编写器代码的构建,但是有很多第三方代码。

XLS 需要(t)生锈的Office COM Interop。这要求安装Office,并且不能在非交互式会话(如Windows服务)中工作。在使用COM互操作的所有 normal 问题中最重要的。

在现有的类上有一个奇怪的“导出到XLS”功能,但是很少见,介于两者之间,以及所获得的一切。不幸的是,由于我们一直以COM Interop作为后备,我们从未完全开发出可用于.XLS的独立库。具有讽刺意味的是,在C#/。NET中使用这种旧格式要比在Java中困难。

XLSX ,但是更容易。可以使用OpenXML SDK来编写。或XML writer和ZipArchive类:在所有的x格式的核心处都是重命名的.ZIP容器中的一堆.XML文件。甚至应该有第三方代码来简化SDK的使用。

.CSV是最低的公分母,并且最容易创建。但是,如果用户应该打开此文档,则缺少格式设置可能会成为问题。

.XSLX是我的选择,如果您需要用户打开它。

.XSL我会避免像一群愤怒的蜜蜂。

答案 1 :(得分:0)

    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();

}