Я использую библиотеку OpenXML для создания файла Excel, и там я добавляю специальный символ звездочки (*) после имени столбца в заголовке, чтобы показать обязательные поля для некоторых столбцов. Но, похоже, он не работает, так как влияет на его поведение и выдает ошибку, когда я загружаю его для импорта данных.
ниже приведено описание ошибки. -
Эта ошибка влияет на данные в Excel, и поэтому я не могу выполнить некоторые операции, такие как привязка и выбор значений списка, используя DropDown в столбце Excel, которыйтакже влияет на процесс импорта. У меня такой вопрос: как разрешить использование специального символа (*) в заголовке столбца 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();
}
}
Цените свои мысли о том же.