Необходимо преобразовать научную ценность в текст - PullRequest
2 голосов
/ 27 сентября 2019

Я пытаюсь преобразовать csv в xls, в котором есть банковский счет № (16 цифр), необходимо преобразовать его в текст

Я пробовал с пакетом EPPlus, с помощью которого легко генерируется xls, но столбец Банковский счетпреобразуется в научное значение. Также пытался преобразовать столбец в числовой и текстовый формат, но это не работает

    private void csvToXls(string source,string destination,string fileName)
    {
        string csvFileName = source;
        string excelFileName = destination+"/"+fileName+".xls";

        string worksheetsName = "sheet 1";

        bool firstRowIsHeader = false;

        var format = new ExcelTextFormat();
        format.Delimiter = '|';
        format.EOL = "\n";              // DEFAULT IS "\r\n";
                                        // format.TextQualifier = '"';

        using (ExcelPackage package = new ExcelPackage(new FileInfo(excelFileName)))
        {
            ExcelWorksheet worksheet = package.Workbook.Worksheets.Add(worksheetsName);
            worksheet.Cells["A1"].LoadFromText(new FileInfo(csvFileName), format, OfficeOpenXml.Table.TableStyles.None, firstRowIsHeader);

            foreach (var cell in worksheet.Cells["C:C"])
            {
                cell.Value = Convert.ToString(cell.Value);

            }

            foreach (var cell in worksheet.Cells["AC:AC"])
            {
                cell.Value = Convert.ToString(cell.Value); 
            }
            worksheet.Cells["C:C"].Style.Numberformat.Format = "#0";
            worksheet.Cells["C:C"].Style.Numberformat.Format = "@";
            worksheet.Cells["AC:AC"].Style.Numberformat.Format = "@";


            package.Save();
        }
    }

Необходимо преобразовать столбцы в текст, который не должен иметь научного значения. Пожалуйста, предложите

Ввод: В test.csv ниже ввод есть

IMDATA || 12345678910124567895274 | 1 | NAME ||||||||| TEST ||||||||||| TESTING |||| 3301003726558| TDATASTING | ИСПЫТАНИЯ | 27-09-2019

Получение результата: Wrong Output

Ожидаемый результат: Expected Output

1 Ответ

3 голосов
/ 27 сентября 2019

Вам необходимо предоставить метод eDataTypes - LoadFromText для каждого столбца, если для столбца не предусмотрено типов, для него будет установлено значение General по умолчанию

Итак, предоставьте `eDataTypes для ExcelTextFormat.

Я только что добавил для 3 столбцов, и он работал хорошо.

public static void csvToXls(string source, string destination, string fileName)
{
    string csvFileName = source;
    string excelFileName = destination + "/" + fileName + ".xls";

    string worksheetsName = "sheet 1";
    bool firstRowIsHeader = false;

    var format = new ExcelTextFormat();
    var edataTypes = new eDataTypes[] { eDataTypes.String, eDataTypes.String, eDataTypes.String };
    format.DataTypes = edataTypes;
    format.Delimiter = '|';
    format.EOL = "\n";              // DEFAULT IS "\r\n";
                                    // format.TextQualifier = '"';
    using (ExcelPackage package = new ExcelPackage(new FileInfo(excelFileName)))
    {
        ExcelWorksheet worksheet = package.Workbook.Worksheets.Add(worksheetsName);
        worksheet.Cells["A1"].LoadFromText(new FileInfo(csvFileName), format, OfficeOpenXml.Table.TableStyles.None, firstRowIsHeader);

        package.Save();
    }
}

ИЛИ

Вы можете попробовать прочитать текст вручную

public static  void csvToXls(string source, string destination, string fileName)
{
    string csvFileName = source;
    string excelFileName = destination + "/" + fileName + ".xls";

    string worksheetsName = "sheet 1";

    using (ExcelPackage package = new ExcelPackage(new FileInfo(excelFileName)))
    {
        ExcelWorksheet worksheet = package.Workbook.Worksheets.Add(worksheetsName);

        var text = File.ReadAllText(source);
        var rows = text.Split('\n');

        for (int rowIndex = 0; rowIndex < rows.Length; rowIndex++)
        {
            var excelRow = worksheet.Row(rowIndex+1);

            var columns = rows[rowIndex].Split('|');

            for (int colIndex = 0; colIndex < columns.Length; colIndex++)
            {
                worksheet.Cells[rowIndex +1, colIndex +1].Value = columns[colIndex];
            }
        }

        package.Save();
    }
}
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...