I need to create a dropdown using a particular list as source in column/columns of an excel file using openXml.
I use the following code for the purpose,
     SpreadsheetDocument spreadSheetDocument = SpreadsheetDocument.Open("C:\\Users\\Harun.TV\\Desktop\\OpenXml\\1.xlsx",true);
        WorkbookPart workbookpart = spreadSheetDocument.WorkbookPart;
        Workbook workbook=workbookpart.Workbook;
        WorksheetPart worksheetPart=workbookpart.WorksheetParts.First();            
        DataValidations dataValidations1 = new DataValidations();
        DataValidation dataValidation2 = new DataValidation() { Formula1 = new Formula1("'mySheet'!$A$1:$A$4"), Type = DataValidationValues.List, AllowBlank = true, ShowInputMessage = true, ShowErrorMessage = true, SequenceOfReferences = new ListValue<StringValue>() { InnerText = "A4:B4" } };
        Formula1 formula12 = new Formula1();
        formula12.Text = "$A$1:$A$3";
        dataValidations1.Append(dataValidation2);
        worksheetPart.Worksheet.Append(dataValidations1);
         workbookpart.Workbook.Save();
        spreadSheetDocument.Close();
And it throws throws an error while opening the excel. the log is as follows,
      <?xml version="1.0" encoding="UTF-8" standalone="true"?>
     -<recoveryLog xmlns="http://schemas.openxmlformats.org/spreadsheetml/2006/main">     <logFileName>error055840_01.xml</logFileName>
      <summary>Errors were detected in file  'C:\Users\Harun.TV\Desktop\OpenXml\6.xlsx'</summary>
      -<removedParts summary="Following is a  list of removed parts:">     
       <removedPart>Replaced Part: /xl/worksheets/sheet3.xml part with XML error. Load error. Line 1, column 467.</removedPart></removedParts></recoveryLog>
Also how can i assign a list of comma separated values to DataValidations and attain the desired result as we do it manually for an excel column?
The problem may be that there is already a "DataValidatoins" node. This works for me:
        DataValidation dataValidation = new DataValidation
        {
            Type = DataValidationValues.List,
            AllowBlank = true,
            SequenceOfReferences = new ListValue<StringValue>() { InnerText = "B1" },
            Formula1 = new Formula1("'SheetName'!$A$1:$A$3")
        };
        DataValidations dvs = worksheet.GetFirstChild<DataValidations>(); //worksheet type => Worksheet
        if (dvs != null)
        {
            dvs.Count = dvs.Count + 1;
            dvs.Append(dataValidation);
        }
        else
        {
            DataValidations newDVs = new DataValidations();
            newDVs.Append(dataValidation);
            newDVs.Count = 1;
            worksheet.Append(newDVs);
        }
                        If you love us? You can donate to us via Paypal or buy me a coffee so we can maintain and grow! Thank you!
Donate Us With