Warning: file_get_contents(/data/phpspider/zhask/data//catemap/2/csharp/303.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
C# 将XLX转换为csv和数据格式_C#_.net_Excel_Save_Converters - Fatal编程技术网

C# 将XLX转换为csv和数据格式

C# 将XLX转换为csv和数据格式,c#,.net,excel,save,converters,C#,.net,Excel,Save,Converters,我在转换文件时遇到两个问题: 我希望日期格式如下所示: 看起来是这样的 8/19/2019 2.转换后,csv文件中将添加带逗号的其他行。我怎样才能克服这个问题 11,900011,S1,8/19/2019,11,6.90,9.90,,18.50,,8.80,,,,,,,,,,,,,,,,,,,,,,,, 12,900012,S1,8/19/2019,12,6.70,8.80,,14.50,,9.40,,,,,,,,,,,,,,,,,,,,,,,, ,,,,,,,,,,,,,,,,,,,,,,

我在转换文件时遇到两个问题:

  • 我希望日期格式如下所示:
  • 看起来是这样的

    8/19/2019
    
    2.转换后,csv文件中将添加带逗号的其他行。我怎样才能克服这个问题

    11,900011,S1,8/19/2019,11,6.90,9.90,,18.50,,8.80,,,,,,,,,,,,,,,,,,,,,,,,
    12,900012,S1,8/19/2019,12,6.70,8.80,,14.50,,9.40,,,,,,,,,,,,,,,,,,,,,,,,
    ,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,
    ,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,
    ....
    
    我使用图书馆

    using Excel=Microsoft.Office.Interop.Excel;
    
    这是我的代码:

     public static void Convert()
            {
                try
                {
                    Excel.Application app = new Excel.Application();
                    //Load file . xlsx
                    Excel.Workbook wb = app.Workbooks.Open(Program.filePaths[1]);
                    //Save file .csv
                    wb.SaveAs(Program.filePaths[0], Excel.XlFileFormat.xlCSVWindows, Type.Missing, Type.Missing, false, false, Excel.XlSaveAsAccessMode.xlNoChange, Excel.XlSaveConflictResolution.xlLocalSessionChanges, false, Type.Missing, Type.Missing, Type.Missing);
                    wb.Close(false);
                    app.Quit();
    
    
                }catch(Exception ex)
                {
                    MessageBox.Show(ex.Message);
                }
    
    
            }
    

    提前感谢您的帮助

    我使用npoi将excel转换为csv (很抱歉,这里丢失了字符串,这是我的项目的副本)

    公共字典exceltosv(IWorkbook输入)
    {
    var csvTrennzeichen=OutputSettings.columnselector.ToString();
    var result=newdictionary();
    对于(var sheetIndex=0;sheetIndexstring.IsNullOrEmpty(WertAuslesen(x)))
    继续;
    var line=string.Join(csvTrennzeichen,rowObj.Cells
    。选择(单元格=>WertAuslesen(单元格)。替换(“\r”和“”)。替换(“\n”和“”)
    .Select(cell=>OutputSettings.writeInNotes?string.Format(“\”{0}\”,cell.Replace(“\”,“\”):cell));
    sheetresult.Add(行);
    }
    添加(sheet.SheetName,string.Join(“\r\n”,sheetresult));
    }
    返回结果;
    }
    私有字符串WertAuslesen(ICell oldCell)
    {
    开关(oldCell.CellType)
    {
    大小写单元格类型。布尔值:
    返回oldCell.BooleanCellValue.ToString();
    案例单元格类型。错误:
    返回oldCell.ErrorCellValue.ToString();
    案例单元类型。公式:
    返回oldCell.CellFormula;
    大小写单元格类型。数字:
    return!DateUtil.IsCellDateFormatted(oldCell)
    ?oldCell.NumericCellValue.ToString(OutputSettings.GetDecimalFormat(数字(oldCell.CellStyle.GetDataFormatString()))
    :oldCell.DateCellValue.ToString(OutputSettings.DateFormat);
    大小写CellType.String:
    返回oldCell.RichStringCellValue.ToString();
    案例单元类型。未知:
    返回oldCell.StringCellValue;
    违约:
    返回“”;
    }
    }
    专用静态整数位数(字符串格式)
    {
    var digits=format.ContainsAny(',','。)?format.Split(new[]{',','.'.})。Last():“”;
    返回数字。长度;
    }
    
    我还觉得有必要添加outputsettings类,因为它可以清除一切,这不是必需的

        public class OutputSettings
    {
        public static readonly OutputSettings Default = new OutputSettings(Encoding.UTF8, null, "yyyyMMdd", "hh:mm:ss", ".", "", "y", "n", ',', true, "", null);
        //I am immutable
        public OutputSettings(CultureInfo culture) : this(
            Encoding.UTF8,
            null,
            culture.DateTimeFormat.ShortDatePattern,
            culture.DateTimeFormat.LongTimePattern,
            culture.NumberFormat.NumberDecimalSeparator,
            culture.NumberFormat.NumberGroupSeparator,
            "y",
            "n",
            ',',
            true,
            "",
            null)
        {
        }
    
        public OutputSettings(
            Encoding encoding,
            Version ioVersion,
            string dateFormat,
            string timeFormat,
            string decimalSeperator,
            string thousandSeperator,
            string yesString,
            string noString,
            char columnseperator,
            bool writeinquotes,
            string outputFolder,
            IResourceHandler resourceHandler)
        {
            Encoding = encoding;
            IOVersion = ioVersion;
            DateFormat = dateFormat;
            TimeFormat = timeFormat;
            DecimalSeperator = decimalSeperator;
            ThousandSeperator = thousandSeperator;
            YesString = yesString;
            NoString = noString;
            ColumnSeparator = columnseperator;
            Writeinquotes = writeinquotes;
            OutputFolder = outputFolder;
            ResourceHandler = resourceHandler;
        }
    
        public IResourceHandler ResourceHandler { get; }
    
        public Encoding Encoding { get; }
    
        public Version IOVersion { get; }
    
        public string DateFormat { get; }
    
        public string TimeFormat { get; }
    
        public string DateTimeFormat => DateFormat + " " + TimeFormat;
    
        public string DecimalSeperator { get; }
    
        public string ThousandSeperator { get; }
    
        public string DecimalFormat => GetDecimalFormat(2);
    
        public string YesString { get; }
    
        public string NoString { get; }
    
        private char _columnseperator;
        public char ColumnSeparator
        {
            get
            {
                return _columnseperator;
            }
            private set
            {
                if (value != ',' && value != ';')
                    throw new ArgumentException(Localization.Resources.StaticTranslationResource.IO_SEPARATOR_MUSS_COMMA_ODER_SEMICOLON_SEIN);
                _columnseperator = value;
            }
        }
    
        public bool Writeinquotes { get; }
        public string OutputFolder { get; set; }
    
        public string GetDecimalFormat(int precision)
        {
            if (precision < 0)
                throw new ArgumentException(Localization.Resources.StaticTranslationResource.OUTPUT_ANZAHL_DER_STELLEN_DARF_NICHT_NEGATIV_SEIN, nameof(precision));
    
            var sb = new StringBuilder($"#{ThousandSeperator}##0{DecimalSeperator}");
            if (precision == 0)
            {
                sb.Append('#');
            }
            else
            {
                for (int i = 0; i < precision; i++)
                {
                    sb.Append('0');
                }
            }
            return sb.ToString();
        }
    }
    
    公共类输出设置
    {
    public static readonly OutputSettings Default=new OutputSettings(Encoding.UTF8,null,“yyyyMMdd”,“hh:mm:ss”,“y”,“n”,“n”,“true”,“null”);
    //我是不变的
    公共输出设置(CultureInfo区域性):此(
    Encoding.UTF8,
    无效的
    culture.DateTimeFormat.ShortDatePattern,
    culture.DateTimeFormat.LongTimePattern,
    culture.NumberFormat.NumberDecimalSeparator,
    culture.NumberFormat.NumberGroupSeparator,
    “y”,
    “n”,
    ',',
    是的,
    "",
    空)
    {
    }
    公共输出设置(
    编码,
    版本ioVersion,
    字符串日期格式,
    字符串时间格式,
    字符串小数分隔符,
    字符串千分位器,
    字符串是字符串,
    弦鼻音,
    炭柱分离器,
    布勒写的信,
    字符串输出文件夹,
    IResourceHandler(resourceHandler)
    {
    编码=编码;
    IOVersion=IOVersion;
    DateFormat=DateFormat;
    TimeFormat=TimeFormat;
    小数分隔符=小数分隔符;
    千分位=千分位;
    是字符串=是字符串;
    鼻音=鼻音;
    柱分离器=柱分离器;
    WriteInNotes=WriteInNotes;
    OutputFolder=OutputFolder;
    ResourceHandler=ResourceHandler;
    }
    公共IResourceHandler ResourceHandler{get;}
    公共编码编码{get;}
    公共版本IOVersion{get;}
    公共字符串日期格式{get;}
    公共字符串时间格式{get;}
    公共字符串DateTimeFormat=>DateFormat+“”+TimeFormat;
    公共字符串小数分隔符{get;}
    公共字符串千分位符{get;}
    公共字符串DecimalFormat=>GetDecimalFormat(2);
    公共字符串YesString{get;}
    公共字符串NoString{get;}
    专用字符分隔器;
    公共字符列分隔符
    {
    得到
    {
    返回柱分离器;
    }
    专用设备
    {
    如果(值!=','&&value!=';')
    抛出新的ArgumentException(Localization.Resources.StaticTranslationResource.IO_SEPARATOR_MUSS_逗号_order_分号_SEIN);
    _列分隔符=值;
    }
    }
    公共bool writeinquetes{get;}
    公共字符串OutputFolder{get;set;}
    公共字符串GetDecimalFormat(整数精度)
    {
    if(精度<0)
    抛出新的ArgumentException(Localization.Resources.StaticTranslationResource.OUTPUT_ANZAHL_DER_STELLEN_DARF_NICHT_Negative_SEIN,nameof(precision));
    var sb=新的StringBuilder($“{MilliandSeperator}}{0{DecimalSeperator}”);
    如果(精度==0)
    {
    某人附加(“#”);
    }
    其他的
    {
    对于(int i=0;i
    编辑:我使用了很多扩展方法使我的代码可读 康萨尼就是其中之一

            public static bool ContainsAll<T>(this IEnumerable<T> superset, params T[] subset) => !subset.Except(superset).Any();
    
        public static bool ContainsAll<T>(this IEnumerable<T> superset, IEnumerable<T> subset) => !subset.Except(superset).Any();
    
        public static bool ContainsAny<T>(this IEnumerable<T> superset, params T[] subset) => subset.Any(superset.Contains);
    
        public static bool ContainsAny<T>(this IEnumerable<T> superset, IEnumerable<T> subset) => subset.Any(superset.Contains);
    
    公共静态bool Contai
    
        public class OutputSettings
    {
        public static readonly OutputSettings Default = new OutputSettings(Encoding.UTF8, null, "yyyyMMdd", "hh:mm:ss", ".", "", "y", "n", ',', true, "", null);
        //I am immutable
        public OutputSettings(CultureInfo culture) : this(
            Encoding.UTF8,
            null,
            culture.DateTimeFormat.ShortDatePattern,
            culture.DateTimeFormat.LongTimePattern,
            culture.NumberFormat.NumberDecimalSeparator,
            culture.NumberFormat.NumberGroupSeparator,
            "y",
            "n",
            ',',
            true,
            "",
            null)
        {
        }
    
        public OutputSettings(
            Encoding encoding,
            Version ioVersion,
            string dateFormat,
            string timeFormat,
            string decimalSeperator,
            string thousandSeperator,
            string yesString,
            string noString,
            char columnseperator,
            bool writeinquotes,
            string outputFolder,
            IResourceHandler resourceHandler)
        {
            Encoding = encoding;
            IOVersion = ioVersion;
            DateFormat = dateFormat;
            TimeFormat = timeFormat;
            DecimalSeperator = decimalSeperator;
            ThousandSeperator = thousandSeperator;
            YesString = yesString;
            NoString = noString;
            ColumnSeparator = columnseperator;
            Writeinquotes = writeinquotes;
            OutputFolder = outputFolder;
            ResourceHandler = resourceHandler;
        }
    
        public IResourceHandler ResourceHandler { get; }
    
        public Encoding Encoding { get; }
    
        public Version IOVersion { get; }
    
        public string DateFormat { get; }
    
        public string TimeFormat { get; }
    
        public string DateTimeFormat => DateFormat + " " + TimeFormat;
    
        public string DecimalSeperator { get; }
    
        public string ThousandSeperator { get; }
    
        public string DecimalFormat => GetDecimalFormat(2);
    
        public string YesString { get; }
    
        public string NoString { get; }
    
        private char _columnseperator;
        public char ColumnSeparator
        {
            get
            {
                return _columnseperator;
            }
            private set
            {
                if (value != ',' && value != ';')
                    throw new ArgumentException(Localization.Resources.StaticTranslationResource.IO_SEPARATOR_MUSS_COMMA_ODER_SEMICOLON_SEIN);
                _columnseperator = value;
            }
        }
    
        public bool Writeinquotes { get; }
        public string OutputFolder { get; set; }
    
        public string GetDecimalFormat(int precision)
        {
            if (precision < 0)
                throw new ArgumentException(Localization.Resources.StaticTranslationResource.OUTPUT_ANZAHL_DER_STELLEN_DARF_NICHT_NEGATIV_SEIN, nameof(precision));
    
            var sb = new StringBuilder($"#{ThousandSeperator}##0{DecimalSeperator}");
            if (precision == 0)
            {
                sb.Append('#');
            }
            else
            {
                for (int i = 0; i < precision; i++)
                {
                    sb.Append('0');
                }
            }
            return sb.ToString();
        }
    }
    
            public static bool ContainsAll<T>(this IEnumerable<T> superset, params T[] subset) => !subset.Except(superset).Any();
    
        public static bool ContainsAll<T>(this IEnumerable<T> superset, IEnumerable<T> subset) => !subset.Except(superset).Any();
    
        public static bool ContainsAny<T>(this IEnumerable<T> superset, params T[] subset) => subset.Any(superset.Contains);
    
        public static bool ContainsAny<T>(this IEnumerable<T> superset, IEnumerable<T> subset) => subset.Any(superset.Contains);
    
    Excel.Worksheet sheet = wb.ActiveSheet;
    sheet.Columns[4].NumberFormat = "yyyy.mm.dd";
    
    Excel.Range last = sheet.Cells.SpecialCells(Excel.XlCellType.xlCellTypeLastCell,
        Type.Missing);
    
    for (int row = last.Row; row > 0; row++)
    {
        Excel.Range r = (Excel.Range)sheet.Cells[row, 1];
        double o = addIn.Application.WorksheetFunction.CountA(r.EntireRow);
        if (o == 0)
            r.EntireRow.Delete();
    }