>

Roo Gem과 협력하고 있으며 표준 A1 구문을 기반으로 스프레드 시트에서 데이터를 가져오고 싶습니다.

Z를 넘어 스프레드 시트에 열이 있으므로 Excel은 AA, AB, AC 열 위치 전체를 수행합니다.

W 열에서 AH 열에 대한 배열을 만들고 싶습니다.

루비는 상단 범위가 Z를지나 확장되지만 A에서 시작하지 않은 경우처럼 보이지 않습니다.

어떻게 아이디어를 ("B".."AC").to_a  그리고 [] 를 얻지 마라

여기에 irb의 기본적인 문제가 있습니다.

("A".."Z").to_a
#=> ["A", "B", "C", "D", "E", "F", "G", "H", "I", "J", "K", "L", "M", "N", "O", "P", "Q", "R", "S", "T", "U", "V", "W", "X", "Y", "Z"]
("B".."Z").to_a
#=> ["B", "C", "D", "E", "F", "G", "H", "I", "J", "K", "L", "M", "N", "O", "P", "Q", "R", "S", "T", "U", "V", "W", "X", "Y", "Z"]
("A".."AC").to_a
#=> ["A", "B", "C", "D", "E", "F", "G", "H", "I", "J", "K", "L", "M", "N", "O", "P", "Q", "R", "S", "T", "U", "V", "W", "X", "Y", "Z", "AA", "AB", "AC"]
("B".."AC").to_a
#=> []

  • 답변 # 1

    어떻게?

    ("A".."AC").to_a.drop(1)
    
    

    elements 를 얼마든지 떨어 뜨릴 수 있습니다  원하는대로 1 개의 범위와 1 개의 배열 생성 만 포함됩니다.

    와이즈 비즈

    The integer could potentially be substituted for someting that returns the position of the letter in the alphabet.

    class Array def from(column) drop(find_index(column).to_i) end end ("A".."AC").to_a.from('F') #=> ["F", "G", "H", "I", "J", "K", "L", "M", "N", "O", "P", "Q", "R", "S", "T", "U", "V", "W", "X", "Y", "Z", "AA", "AB", "AC"] 사용  @ sagarpandya82 덕분에 직접 수업

    Range
    
    

  • 답변 # 2

    class Range def from(column) to_a.drop(find_index(column).to_i) end end ("A".."AC").from('F') #=> ["F", "G", "H", "I", "J", "K", "L", "M", "N", "O", "P", "Q", "R", "S", "T", "U", "V", "W", "X", "Y", "Z", "AA", "AB", "AC"] 사용  빈 배열을 빌드합니다. 현재 값이 두 번째 매개 변수와 같으면 루프가 끊어집니다. 새로 구축 된 배열 Kernel#loop 를 반환하려면 우리는 o 를 전달   o 에 대한 논쟁으로 기본적으로 break 를 반환합니다. .

    nil
    
    

  • 답변 # 3

    이에 대한 수학적 답은 다음과 같습니다.

    A =>AH = (A =>W) + (W =>AH)

    그래서W =>AH = (A =>AH)-(A =>W)

    이것에 대한 프로그램적인 대답 :

    def cols a, b
      loop.with_object([]) do |_, o|
        o << a
        break(o) if a == b
        a = a.next
      end
    end  
    cols('W','AH')
     #=> ["W", "X", "Y", "Z", "AA", "AB", "AC", "AD", "AE", "AF", "AG", "AH"]
    cols("A","Z")
     #=> ["A", "B", "C", "D", "E", "F", "G", "H", "I", "J", "K", "L", "M",
     #    "N", "O", "P", "Q", "R", "S", "T", "U", "V", "W", "X", "Y", "Z"]
    cols("B","Z")
     #=>  ["B", "C", "D", "E", "F", "G", "H", "I", "J", "K", "L", "M", "N",
     #     "O", "P", "Q", "R", "S", "T", "U", "V", "W", "X", "Y", "Z"]
    cols("A","AC")
     #=> ["A", "B", "C", "D", "E", "F", "G", "H", "I", "J", "K", "L", "M",
     #    "N", "O", "P", "Q", "R", "S", "T", "U", "V", "W", "X", "Y", "Z",
     #    "AA", "AB", "AC"]
    cols("B","AC")
     #=> ["B", "C", "D", "E", "F", "G", "H", "I", "J", "K", "L", "M", "N",
     #    "O", "P", "Q", "R", "S", "T", "U", "V", "W", "X", "Y", "Z", "AA",
     #    "AB", "AC"]
    
    

    와이즈 비즈  두 번째 범위에서는 'W'가없는 독점입니다.

    보다 일반적인 대답은

    ("A".."AH").to_a - ("A"..."W").to_a
    #=> ["W", "X", "Y", "Z", "AA", "AB", "AC", "AD", "AE", "AF", "AG", "AH"]
    
    

  • 답변 # 4

    루비의 ...  Excel에서 열 이름을 증가시키는 방식으로 문자를 증가시킵니다.

    r = "W".."AH"
    ("A"..r.end).to_a - ("A"...r.begin).to_a
    #=> ["W", "X", "Y", "Z", "AA", "AB", "AC", "AD", "AE", "AF", "AG", "AH"]
    
    

    따라서 String#succ 를 통해 목적지 값에 도달 할 수 있다는 것을알고 간단한 루프가 작동합니다 :

    'Z'.succ #=> "AA"
    
    

    그러나 잘못된 값을 가지면 쉽게 무한 루프가 될 수 있습니다.

    <시간>

    보다 강력한 솔루션을 위해 다음과 같이 맞춤 클래스를 작성할 수 있습니다.

    succ
    
    

    기본적으로 열 이름을 감싸지 만 이름의 ary = ['W'] ary << ary.last.succ until ary.last == 'AH' ary #=> ["W", "X", "Y", "Z", "AA", "AB", "AC", "AD", "AE", "AF", "AG", "AH"] 도 사용합니다.  계정 :

    class Column
      attr_reader :name
      def initialize(name)
        raise ArgumentError if name =~ /[^A-Z]/
        @name = name
      end
      def <=>(other)
        [name.length, name] <=> [other.name.length, other.name]
      end
      def succ
        Column.new(name.succ)
      end
    end
    
    

    이는 긴 이름이 짧은 이름 뒤에 오는 것을 의미합니다. 길이가 같은 이름은 사전 식으로 비교됩니다.

    이렇게하면 원하는 시퀀스를 생성 할 수 있습니다 :

    length
    
    

    [name.length, name] <=> [other.name.length, other.name]

관련 자료

  • 이전 alamofire - 빠른 - objectmapper를 사용하여 flickr json을 읽는 방법
  • 다음 reporting services - ssrs 보고서에서 카테고리에 지정된 색상의 레이블 설정