Использование EPPlus Excel - Как игнорировать проверку ошибок excel или удалить зеленый тег в верхней левой части ячейки

Я использую EPPlus для экспорта файла excel 2007. Файл может экспортироваться нормально, но у меня есть проблема с настройкой формата столбца. Мой строковый столбец с цифровым стилем (№ заказа заказа 49000001) будет экспортирован с зеленым тегом в верхнем левом углу каждой ячейки. Как его удалить?

Я пытаюсь установить формат номера в "Общее", но он не работает.

Пожалуйста, помогите.

p.s Я использую С#

Ответ 1

EPPLus в настоящее время не поддерживает отключение этого зеленого тега. Тем не менее, можно изменить проект, чтобы его подавить. Сначала вам нужно добавить новый класс в проект, ExcelIgnoredError.cs:

using System;
using System.Collections.Generic;
using System.Linq;
using System.Text;
using System.Xml;

namespace OfficeOpenXml
{
    public class ExcelIgnoredError : XmlHelper
    {
        private ExcelWorksheet _worksheet;

        /// <summary>
        /// Constructor
        /// </summary>
        internal ExcelIgnoredError(XmlNamespaceManager ns, XmlNode node, ExcelWorksheet xlWorkSheet) :
            base(ns, node)
        {
            _worksheet = xlWorkSheet;
        }


        public bool NumberStoredAsText
        {
            get
            {
                return GetXmlNodeBool("@numberStoredAsText");
            }
            set
            {
                SetXmlNodeBool("@numberStoredAsText", value);
            }
        }


        public bool TwoDigitTextYear
        {
            get
            {
                return GetXmlNodeBool("@twoDigitTextYear");
            }
            set
            {
                SetXmlNodeBool("@twoDigitTextYear", value);
            }
        }


        public string Range
        {
            get
            {
                return GetXmlNodeString("@sqref");
            }
            set
            {
                SetXmlNodeString("@sqref", value);
            }
        }
    }
}


Затем вам нужно будет изменить ExcelWorkSheet.cs, добавив этот код:

public ExcelIgnoredError _ignoredError;

public ExcelIgnoredError IgnoredError
{
    get
    {
        if (_ignoredError == null)
        {
            // Check that ignoredErrors exists
            XmlNode node = TopNode.SelectSingleNode("d:ignoredErrors", NameSpaceManager);

            if (node == null)
            {
                CreateNode("d:ignoredErrors");
            }

            //Check that ignoredError exists
            node = TopNode.SelectSingleNode("d:ignoredErrors/d:ignoredError", NameSpaceManager);

            if (node == null)
            {
                CreateNode("d:ignoredErrors/d:ignoredError");
                node = TopNode.SelectSingleNode("d:ignoredErrors/d:ignoredError", NameSpaceManager);
            }

            _ignoredError = new ExcelIgnoredError(NameSpaceManager, node, this);
        }

        return (_ignoredError);
    }
}


Скомпилируйте решение EPPPlus, включите его в свой проект, и вы сможете удалить теги с помощью кода, подобного этому:

//Get a reference to the worksheet
ExcelWorkSheet sheet = package.WorkBook.WorkSheets(0);

//Set the cell range to ignore errors on to the whole sheet
sheet.IgnoredError.Range = Sheet.Dimension.Address;

//Do not display the warning 'number stored as text'
sheet.IgnoredError.NumberStoredAsText = true;

Ответ 2

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

Ответ 3

Да, EPPlus не может обрабатывать данные как число в зависимости от его значения. Если ваши базовые данные находятся в строковом типе данных, вы можете попытаться получить его в числовом типе данных. например Если вы получаете данные из хранимой процедуры, попробуйте получить ее как числовое значение. У нас была проблема, когда мы ее реализовали. Мы использовали одну и ту же хранимую процедуру для Web и генерировали excel. Веб-интерфейс должен был быть в строковом типе данных для форматирования, и EPPlus, очевидно, нуждается в том, чтобы он был в числовом формате, чтобы он мог показать его как число. Решение заключалось в том, чтобы преобразовать требуемые данные в числовые при экспорте в Excel с использованием EPPlus в коде С#. Таким образом, вам нужно написать функцию преобразования, чтобы преобразовать необходимые поля в DataTable в требуемый тип данных (или реализовать логику преобразования с помощью преобразования или преобразования в хранимой процедуре).

Вкратце: - Напишите функцию С# для преобразования типов данных столбцов в DataTable, которую вы получите, прежде чем отправлять ее в качестве листа excel с использованием EPPlus.

Ответ 4

Я решил эту проблему гораздо проще. Например. если я определяю значение "123" как объект, а не строку, то он сохраняет файл excel в порядке.

Ответ 5

Вы можете использовать

worksheet.Cell[1,1].Formula = "TEXT(" + cellvalue ")";