Проверка диапазона в Excel с использованием C # - PullRequest
2 голосов
/ 23 июля 2010

Я искал в интернете 4 часа и просто не могу этого сделать.

Мои цели: создать комбо, где я могу сортировать свои предметы и когда я нажимаю на один из них,элемент появляется один.

В Excel это легко сделать, но я не могу сделать это в C #.

Я нашел этот ответ: Другая тема , но яЯ не могу понять, откуда взялись "this.Controls".

Спасибо за вашу помощь

Ответы [ 3 ]

6 голосов
/ 20 мая 2011

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

/// <summary>
/// Adds a small Infobox and a Validation with restriction (only these values will be selectable) to the specified cell.
/// </summary>
/// <param name="worksheet">The excel-sheet</param>
/// <param name="rowNr">1-based row index of the cell that will contain the validation</param>
/// <param name="columnNr">1-based column index of the cell that will contain the validation</param>
/// <param name="title">Title of the Infobox</param>
/// <param name="message">Message in the Infobox</param>
/// <param name="validationValues">List of available values for selection of the cell. No other value, than this list is allowed to be used.</param>
/// <exception cref="Exception">Thrown, if an error occurs, or the worksheet was null.</exception>
public static void AddDataValidation(Worksheet worksheet, int rowNr, int columnNr, string title, string message, List<string> validationValues)
{
    //If the message-string is too long (more than 255 characters, prune it)
    if (message.Length > 255)
        message = message.Substring(0, 254);

    try
    {
        //The validation requires a ';'-separated list of values, that goes as the restrictions-parameter.
        //Fold the list, so you can add it as restriction. (Result is "Value1;Value2;Value3")
        //If you use another separation-character (e.g in US) change the ; appropriately (e.g. to the ,)
        string values = string.Join(";", validationValues);
        //Select the specified cell
        Range cell = worksheet.Cells[rowNr, columnNr];
        //Delete any previous validation
        cell.Validation.Delete();
        //Add the validation, that only allowes selection of provided values.
        cell.Validation.Add(XlDVType.xlValidateList, XlDVAlertStyle.xlValidAlertStop, XlFormatConditionOperator.xlBetween, values, Type.Missing);
        cell.Validation.IgnoreBlank = true;
        //Optional put a message there
        cell.Validation.InputTitle = title;
        cell.Validation.InputMessage = message;

   }
   catch (Exception exception)
    {
         //This part should not be reached, but is used for stability-reasons
         throw new Exception(String.Format("Error when adding a Validation with restriction to the specified cell Row:{0}, Column:{1}, Message: {2}", rowNr, columnNr, message), exception);

    }
}

Если вы невам не нужен информационный блок, просто не указывайте части, где появляются переменные заголовок или сообщение.

0 голосов
/ 23 июля 2010

Я нашел сам, пробуя случайные вещи:

Range m_range = Sheet.get_Range ("A1", "F9"); m_range.AutoFilter (1, Missing.Value, XlAutoFilterOperator.xlAnd, Отсутствует. Значение, правда);

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

0 голосов
/ 23 июля 2010

Я не могу помочь вам с вопросом об Excel, но this.Controls, скорее всего, поступает из приложения Windows Forms.См. эту статью о MSDN.Вы можете попробовать это, создав пустое приложение Windows Forms, а затем набрав в Form1.cs this.Controls.

...