Моделируйте строковую функцию разделения в Формуле Excel

Ну, во-первых, вы могли бы создать третий класс:

internal class ImplementationDetail
{
    private static readonly object lockme = new object();
    public static void DoDatabaseQuery(whatever)
    {
        lock(lockme)
             ReallyDoQuery(whatever);
    }
}

, а теперь UseSQLKatana и UseSQLCutlass вызывают реализациюDetail.DoDatabaseQuery.

Во-вторых, вы можете решить не беспокоиться об этом и заблокировать объект, который виден обоим типам. Основная причина этого заключается в том, что становится трудно определить, кто блокирует объект, и трудно защитить от враждебного частично доверенного кода, блокирующего объект злонамеренно. Если вас не волнует ни один недостаток, вам не нужно слепо следовать рекомендациям.

25
задан a_m0d 7 September 2011 в 19:18
поделиться

4 ответа

Формула, возвращающая либо первое слово , либо все остальные слова .

=IF(ISERROR(FIND(" ",TRIM(A2),1)),TRIM(A2),MID(TRIM(A2),FIND(" ",TRIM(A2),1),LEN(A2)))

Примеры и результаты

Text                  Description                      Results

                      Blank 
                      Space 
some                  Text no space                some
some text             Text with space                  text
 some                 Text with leading space          some
some                  Text with trailing space         some
some text some text   Text with multiple spaces        text some text

Комментарии к формуле:

  • Функция TRIM используется для удаления всех начальных и конечных пробелов. Повторяющиеся интервалы в тексте также удаляются.
  • Функция НАЙТИ затем находит первый пробел
  • Если пробела нет, то обрезанный текст возвращается
  • В противном случае функция MID используется для возврата любого текста после первый пробел
23
ответ дан 28 November 2019 в 20:54
поделиться

Следующий код возвращает первое слово в ячейке A1, когда оно разделено пробелом (работает в Excel 2003):

=LEFT(A1, SEARCH(" ",A1,1))
9
ответ дан 28 November 2019 в 20:54
поделиться
=IFERROR(LEFT(A3, FIND(" ", A3, 1)), A3)

Это сначала проверит, содержит ли ячейка пробел, если да, то вернет первое значение из пробела, иначе вернет значение ячейки.

Изменить

Просто чтобы добавить к приведенной выше формуле, как она есть, если в ячейке нет значения, она вернет 0. Если вы хотите отобразить сообщение или что-то, чтобы сообщить пользователю, что оно пустое, вы можете использовать следующее:

=IF(IFERROR(LEFT(A3, FIND(" ", A3, 1)), A3)=0, "Empty", IFERROR(LEFT(A3, FIND(" ", A3, 1)), A3))
9
ответ дан 28 November 2019 в 20:54
поделиться

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

Например, взяв формулу Джеймса:

=IFERROR(LEFT(A3, FIND(" ", A3, 1)), A3)

Которая действительна только в Excel 2007 или более поздних версиях.

Разбейте ее следующим образом. :

B3: =FIND(" ", A3)
C3: =IF(ISERROR(B3),A3,LEFT(A3,B3-1))

Просто работать немного проще, по частям. Когда это будет сделано, вы можете превратить его в

=IF(ISERROR(FIND(" ", A3)),A3,LEFT(A3,FIND(" ", A3)-1))

, если хотите.

3
ответ дан 28 November 2019 в 20:54
поделиться
Другие вопросы по тегам:

Похожие вопросы: