2016-08-08 5 views
0

다음 RailsCast http://railscasts.com/episodes/362-exporting-csv-and-excel?autoplay=true xls 다운로드를 포맷하려고하는데 아래 코드를 사용하여 xls 파일을 포맷하지 않지만 Excel이 열립니다 (데이터가없고 파일이 열리지 않음).Ruby on Rails : XLS를 다운로드 할 때 내 서식이 작동하지 않는 이유는 무엇입니까?

Mime_types.rb :

Mime::Type.register "application/xls", :xls 

Contacts_controller :

def index 
    @contacts = Contact.where(user_id: session[:user_id]) 
    respond_to do |format| 
    format.html 
    format.csv { send_data @contacts.to_csv } 
    format.xls 
    end 
end 

Contact 모델 :

def self.to_csv(options = {}) 
    CSV.generate(options) do |csv| 
    csv << column_names 
    all.each do |contact| 
     csv << contact.attributes.values_at(*column_names) 
    end 
    end 
end 

Index.xls.erb :

<table border="1"> 
    <tr> 
    <th>Firstname</th> 
    <th>Surname</th> 
    <th>Email</th> 
    </tr> 
    <% @contacts.each do |contact| %> 
    <tr> 
    <td><%= contact.firstname %></td> 
    <td><%= contact.surname %></td> 
    <td><%= contact.email %></td> 
    </tr> 
    <% end %> 
</table> 

누구나이 이유를 알 수 있습니까?

나는 컨트롤러 format.xls { send_data @contacts.to_csv(col_sep: "\t") }에 선 format.xls를 교체 할 때 는 XLS 파일을 다운로드하지만 서식 않습니다 수 있습니다.

답변

0

(데이터가없고 파일이없는) Excel이 열립니다.

아마, 스프레드 시트 데이터가 아니라 html 표를 보내는 것과 관련이있을 수 있습니다. railscast에서 Ryan은 대신 XML 마크 업을 생성합니다. 너 그거 해봤 니?

컨트롤러 형식 xls {send_data @ contacts.to_csv (col_sep : "\ t")}에서 줄 형식을 바꾸는 경우 XLS 파일을 다운로드하지만 형식은 지정하지 않습니다.

사실, 무슨 일 당신이 CSV는 는 XLS 파일로을 척이 파일 다운로드하는 것이이지만, 엑셀 당신에게 친절하려고 노력하고 통과 할 수있다. CSV는 데이터 전용 형식이므로 형식이 지정되지 않습니다. 형식 지정 데이터를 여기에 포함 할 수 없으므로 Excel에서 아무 것도 가져 오지 않습니다.

"가짜"스프레드 시트를 생성하는 대신 실제 물건을 생성하여 더 나은 결과를 얻을 수 있으며 Excel에서 올바르게 해석 할 수 있기를 바랍니다. 예를 들어 axlsx gem을 확인하십시오.

+0

RailsCast의 4:31 Ryan은 HTML 표를 사용하여 Excel 파일을 포맷하고 XML 마크 업을 시도했지만 파일이 손상되었습니다. 서식 문제에 대해 설명해 주셔서 감사합니다.하지만 지금은 보석을 통해이를 수행하고 싶지 않습니다. –

+0

@BenSmith : 실제 캐스트를 보지 못했습니다. :) 그러나 아래 비디오의 텍스트 섹션에는 XML 버전 만 있습니다. –

+0

@BenSmith : "나는 보석을 원하지 않는다"- 그래, 나는 그것을 완전히 얻는다. 우리는 비슷한 가짜 xls로 3 년간을 관리했습니다. 그러나 결국, 우리는 진짜를 구현해야했습니다. –