попробуйте с ресурсами только печатает один раз [дубликат]

Много способов:

  1. Работа с числом возвращает:

Если ваши возвращаемые значения являются числами, а совпадение уникальным (есть только один Джон Доу в данных), или вы хотите суммировать возврат, если есть кратные, тогда использование SUMIFS является самым быстрым методом.

=SUMIFS(C:C,A:A,J1,B:B,J2)


  1. При использовании не числовых возвратов

Если возвращаемые значения не являются числовыми или имеются кратные, тогда есть два метода для получения первого совпадения в списке:

а. Вспомогательная колонка:

В четвертом столбце введите следующую формулу:

=A1&B1

и скопируйте список

Затем используйте INDEX / MATCH:

=INDEX(C:C,MATCH(J1&J2,D:D,0))

b. Формула массива:

Если вы не хотите или не можете создать четвертый столбец, используйте формулу типа массива:

=INDEX(C:C,AGGREGATE(15,6,ROW($A$1:$A$4)/(($A$1:$A$4=J1)*($B$1:$B$4=J2)),1))

Формулы типа массива должны ограничивать размер данных к набору данных.

Если ваш набор данных регулярно меняет размеры, мы можем изменить приведенное выше динамическое значение, добавив больше INDEX / MATCH, чтобы вернуть последняя ячейка с данными:

=INDEX(C:C,AGGREGATE(15,6,ROW($A$1:INDEX($A:$A,MATCH("ZZZ",A:A)))/(($A$1:INDEX($A:$A,MATCH("ZZZ",A:A))=J1)*($B$1:INDEX($B:$B,MATCH("ZZZ",A:A))=J2)),1))

Это позволит увеличить или уменьшить набор данных, и формула будет проходить только через те, у которых есть данные, а не полный столбец.

методы, описанные выше, устанавливаются в порядке наилучшего улучшения.


  1. Чтобы получить несколько ответов в одной ячейке

Если вы не хотите суммировать, или возвращаемые значения - это текст, и есть несколько экземпляров John Doe, и вы хотите, чтобы все значения возвращались в одну ячейку:

a. Если у вас есть Office 365 Excel, вы можете использовать форму массива TEXTJOIN:

=TEXTJOIN(",",TRUE,IF(($A$1:$A$4=J1)*($B$1:$B$4=J2),$C$1:$C$4,""))

Будучи формулой массива, ее нужно подтвердить с помощью Ctrl-Shift-Enter вместо Enter при выходе из режима редактирования. Если все сделано правильно, Excel поместит {} вокруг формулы.

Как и формула AGGREGATE, она должна быть ограничена набором данных. Диапазоны могут быть сделаны динамическими с помощью функций INDEX / MATCH, таких как выше.

b. Если у вас нет Office 365 Excel, добавьте этот код в модуль, прикрепленный к книге:

Function TEXTJOIN(delim As String, skipblank As Boolean, arr)
    Dim d As Long
    Dim c As Long
    Dim arr2()
    Dim t As Long, y As Long
    t = -1
    y = -1
    If TypeName(arr) = "Range" Then
        arr2 = arr.Value
    Else
        arr2 = arr
    End If
    On Error Resume Next
    t = UBound(arr2, 2)
    y = UBound(arr2, 1)
    On Error GoTo 0

    If t >= 0 And y >= 0 Then
        For c = LBound(arr2, 1) To UBound(arr2, 1)
            For d = LBound(arr2, 1) To UBound(arr2, 2)
                If arr2(c, d) <> "" Or Not skipblank Then
                    TEXTJOIN = TEXTJOIN & arr2(c, d) & delim
                End If
            Next d
        Next c
    Else
        For c = LBound(arr2) To UBound(arr2)
            If arr2(c) <> "" Or Not skipblank Then
                TEXTJOIN = TEXTJOIN & arr2(c) & delim
            End If
        Next c
    End If
    TEXTJOIN = Left(TEXTJOIN, Len(TEXTJOIN) - Len(delim))
End Function

Затем используйте формулу TEXTJOIN (), как описано выше.

7
задан Azulflame 9 October 2012 в 17:12
поделиться

3 ответа

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

BufferedWriter outStream= new BufferedWriter(new FileWriter("encoded.txt", true));
17
ответ дан nicholas.hauschild 22 August 2018 в 15:44
поделиться
  • 1
    Я немного новичок в вводах и выводах java, так что я могу привести пример? Я не в идеальном месте для тестирования прямо сейчас (без JDK или IDE на этой рабочей станции) – Azulflame 29 May 2012 в 19:06
  • 2
    Мой ответ уже содержит изменения, которые вы должны применить для выполнения этой работы. – nicholas.hauschild 29 May 2012 в 19:07
  • 3
    Я написал это, когда в нем не было никакого кода. Спасибо за ответ. – Azulflame 29 May 2012 в 19:08
  • 4
    Я использую 2-й параметр как истинный и в течение того же запуска приложения, который он красиво добавляет. Но когда я снова запускаю такое же приложение (со вторым параметром как true), он уничтожает всю информацию предыдущего сеанса запуска, а затем снова красиво добавляет ... Хотя я пытаюсь реализовать свой собственный примитивный регистратор и хочу сохранить в журнале всю информацию ... Любые подсказки? – agira 26 June 2018 в 06:32

По умолчанию FileWriter перезапишет файл. Что вы можете сделать, так это определить читателя следующим образом: new FileWriter("encoded.txt", true) Таким образом, файл будет добавлен вместо того, чтобы быть перезаписанным. Надеюсь, это поможет!

2
ответ дан mprabhat 22 August 2018 в 15:44
поделиться

Я не уверен, что этот код должен делать. Он выдает ошибку, если ваша строка ввода длиннее одного символа, потому что вы закрываете FileWriter внутри цикла, а затем пытаетесь записать его еще раз.

Я интерпретирую ваш вопрос следующим образом: вы «Интересно, почему только последний результат находится в файле. В этом случае это связано с тем, что вы не создали свой FileWriter в режиме добавления. Посмотрите на различные конструкторы, доступные для FileWriter, и используйте тот, который позволяет добавлять файл.

0
ответ дан theglauber 22 August 2018 в 15:44
поделиться
Другие вопросы по тегам:

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