Размещение специального символа в заголовке столбца Excel дает ошибку - PullRequest
1 голос
/ 22 октября 2019

Я использую библиотеку OpenXML для создания файла Excel, и там я добавляю специальный символ звездочки (*) после имени столбца в заголовке, чтобы показать обязательные поля для некоторых столбцов. Но, похоже, он не работает, так как влияет на его поведение и выдает ошибку, когда я загружаю его для импорта данных.

ниже приведено описание ошибки. -

enter image description here

Эта ошибка влияет на данные в Excel, и поэтому я не могу выполнить некоторые операции, такие как привязка и выбор значений списка, используя DropDown в столбце Excel, которыйтакже влияет на процесс импорта. enter image description here У меня такой вопрос: как разрешить использование специального символа (*) в заголовке столбца Excel с использованием OpenXML?

Ниже приведен код, в котором я передаю имена столбцов импорта (включая *). )

public ImportField Owner = new ImportField("Owner", ImportField.DataTypes.String, false, 50);
public ImportField BusinessUnit = new ImportField("Business Unit*", ImportField.DataTypes.String, true, 100);
public ImportField AccountNo = new ImportField("Account Number", ImportField.DataTypes.String, false, 100);
public ImportField LastName = new ImportField("Last Name*", ImportField.DataTypes.String, true, 50);
public ImportField FirstName = new ImportField("First Name*", ImportField.DataTypes.String, true, 50);
public ImportField Department = new ImportField("Department*", ImportField.DataTypes.String, true, 50);
public ImportField Title = new ImportField("Title*", ImportField.DataTypes.String, true, 50);
public ImportField BusinessPhone = new ImportField("Business Phone", ImportField.DataTypes.String, false, 20);
public ImportField MobilePhone = new ImportField("Mobile Phone", ImportField.DataTypes.String, false, 20);
public ImportField Fax = new ImportField("Fax", ImportField.DataTypes.String, false, 20);
public ImportField Email = new ImportField("Email*", ImportField.DataTypes.String, true, 100);
public ImportField Address1 = new ImportField("Address 1", ImportField.DataTypes.String, false, 100);
public ImportField Address2 = new ImportField("Address 2", ImportField.DataTypes.String, false, 100);
public ImportField City = new ImportField("City", ImportField.DataTypes.String, false, 50);
public ImportField State = new ImportField("State", ImportField.DataTypes.String, false, 20);
public ImportField Zip = new ImportField("Zip", ImportField.DataTypes.String, false, 15);

Конструктор ImportField:

private void ImportField(string excelColumn, DataTypes dataType, bool required, int length, string sheetName)
{
    ExcelColumn = excelColumn;
    DataType = dataType;
    Length = length;

    Required = required;
    SheetName = sheetName;                              

    if (dataType == DataTypes.Boolean)
    {
      DataTable dtYesNo = new DataTable();
      dtYesNo.Columns.Add("Value", typeof(Boolean));
      DataRow dr = dtYesNo.NewRow();
      dr["Value"] = true;
      dtYesNo.Rows.Add(dr);
      dr = dtYesNo.NewRow();
      dr["Value"] = false;
      dtYesNo.Rows.Add(dr); 

      this.PickTable = dtYesNo;
      this.PickList = true;
      this.PickListField = "Value";
    }
}

Метод создания в Excel:

public void Create(string fileName, List<string> sheetNames, List<ImportFileBase.ImportField> fields, bool addErrorColumn)
{
  //Open the copied template workbook. 
  using (SpreadsheetDocument myWorkbook = SpreadsheetDocument.Create(fileName, SpreadsheetDocumentType.Workbook))
  {
    ExtendedFilePropertiesPart extended = myWorkbook.AddExtendedFilePropertiesPart();
    WorkbookPart workbookPart = myWorkbook.AddWorkbookPart();

    DocumentFormat.OpenXml.ExtendedProperties.Properties properties1 = new DocumentFormat.OpenXml.ExtendedProperties.Properties();

    ApplicationVersion applicationVersion1 = new ApplicationVersion();
    applicationVersion1.Text = "12.0000";

    properties1.Append(applicationVersion1);
    extended.Properties = properties1;

    // Create Styles and Insert into Workbook
    var stylesPart =
        myWorkbook.WorkbookPart.AddNewPart<WorkbookStylesPart>();
    Stylesheet styles = new CustomStylesheet();
    styles.Save(stylesPart);

    var workbook = new Workbook();
    var fileVersion =
        new FileVersion
        {
          ApplicationName = "Microsoft Office Excel"
        };

    if (sheetNames != null)
    {
      //create a sheet for each one specified in the list
      var sheets = new Sheets();

      //create validation lists first
      if (sheetNames.Contains("ListValues", StringComparer.InvariantCultureIgnoreCase))
      {
        WorksheetPart listValuesSheet = this.CreateLookupWorksheetPart(workbookPart, fields);
        AddWorkSheetPart(listValuesSheet, workbookPart, sheetNames, "ListValues", sheets, true);
      }

      ///add import sheet
      foreach (string name in sheetNames)
      {
        WorksheetPart worksheetPart = null;
        if (!name.Equals("ListValues", StringComparison.InvariantCultureIgnoreCase))
          worksheetPart = this.CreateDataWorksheetPart(workbookPart, fields, addErrorColumn);

        AddWorkSheetPart(worksheetPart, workbookPart, sheetNames, name, sheets, false);
      }

      //add file version and sheets to workbook
      workbook.Append(fileVersion);
      workbook.Append(sheets);
    }
    //add all defined Names for validation lists
    if (_definedNames != null)
      workbook.Append(_definedNames);

    myWorkbook.WorkbookPart.Workbook = workbook;
    myWorkbook.WorkbookPart.Workbook.Save();
    myWorkbook.Close();
    myWorkbook.Dispose();
  }
}

Цените свои мысли о том же.

...