プロが教えるわが家の防犯対策術!

excel2016で、例えば
<table border="0" cellpadding="0" cellspacing="4" width="97%">と記入したデーターファイルを拡張子csvにしてアップロードすると
<table border=""0"" cellpadding=""0"" cellspacing=""4"" width=""97%"">と二個の引用符で囲まれて格納されます。
回避する方法をお教えください。どの段階で変換を間違えているのでしょうか。

質問者からの補足コメント

  • 早速のアドヴァイスをありがとうございます。
    「 "が一つ〜"が一つの間の文字列はそのまま抜き出し、その外のカンマでデータを区切る。→ 文字列の中の"" を " にするという変換が必要です。」
    とのことですが、この変換はエクセル上でできるのでしょうか。それともCSVエディターが必要なのでしょうか?
    よろしくお願いします。

    No.1の回答に寄せられた補足コメントです。 補足日時:2020/02/07 23:24

A 回答 (4件)

結論から言うと、次のいずれかになります。


○属性値には 二重引用符ではなく一重引用符を使う。HTML以外の場所でも備考欄には二重引用符を書かない。
○ Excelは使わずに、テキストエディタで編集する。
 表形式になってないのでやりずらいかもしれないけど、そこは我慢する。
○プログラムを確認して、"" を " に変換して読み込むように変更する。
 自分でやる。あるいは、他人(制作者を含む)に頼む。


ちょっと面倒なので、プログラムの内容を確認まではやりません。

おそらく、そのCGIでは、「一般的な規則に従ったCSV」を使うことは想定していなくて、「このシステム独自のCSVによく似たフォーマット」を使っているのでしょう。
ならば、対応するのは、ファイル編集を「独自形式」に合わせるか、システム側を「一般的なCSV」に合わせるか、になります。

問題になるのは"" ⇔ " の変換ですから、 二重引用符を使わなければ、問題はおこりません。
HTMLの属性値は " でも ' でもいいので、 ' を使えば回避できます。

Excelを使うと、どうしても「一般的なCSV」になってしまいます。
そのような自動変換をしないテキストエディタを使えば、元の状態を保持できます。


http://www.kent-web.com/pubc/kitei.html
> プログラムを改造して利用することは自由です。
とあるので、Excelから出力されたCSVに対応するように改造することができます。

https://www.kentweb.net/pubc/labo/
有償ですが、作者による改造も受けつけていますので、予算その他の条件があえば、対応してもらえるかもしれません。


このような話は、一般論で言っても意味がありません。
Kent-Webには公式のサポート掲示板があるので、そちらで聞いた方が確実ではないか、と思います。
http://www.kent-web.com/support/
    • good
    • 0
この回答へのお礼

本当にご親切にアドヴァイスをありがとうございます。
Excelだけでなく、2.3種のCSVエディターでも試してみたのですが、いい結果が得られませんでした。
ご教示にあるように「Kent-Webには公式のサポート掲示板」にもお尋ねしているのですが、まだ未回答です。
とりあえず一件ずつHTMLを再記入して急場をしのぐことにします。そしておいてCSVのことを勉強してみます。

お礼日時:2020/02/09 13:31

まずは次のことをはっきりさせてください。


○「アップロード」とは、具体的にどんな操作をして、どんな状態になるもののことを言っているのか?
○「"が 2つ並んでいる」というのは、具体的にどのような方法で確認したのか?
○ CSVファイルと「確認方法」との間にどんな関係があるのか?

これらの内容によって
1.CSVでは無い形式でアップロードするのが正しい
2.文字列中の " を表現する時に別の方法を使うのが正しいので、アップロード前に加工するのが正しい
3.アップロードする時に変換処理するのが正しい
4.サーバーにある「閲覧プログラム」状で処理するのが正しい

等が考えられ、それぞれで対処方法が違います。


例えば、 1.の場合は、そもそもCSVを使うこと自体が間違いなわけで、
#2にあるようなVBAを使うとか、「テキスト形式(タブ区切り)」で保存するとかで解決できるかもしれません。
しかし、「CSVをアップロードするのが正しい」のなら、そんな処理をしてしまうと、別の問題が発生するでしょう。
(データ中にカンマがあって、本来1項目のはずが2つに分解されてしまう、とか)
    • good
    • 0
この回答へのお礼

ありがとうございます。
Kent webさんが配布しているcgiで作られたS-Cartを利用させていただいて、サイトを構築中です。
パーミッションの設定してサイトは構築されました。
管理ページの個別登録フォームで10数点のデータを新規登録しました。登録項目はHTMLができる備考欄を含めて6か所ほどあります。
10数点のデータは正しくサイトで表示されていました。

① データ一覧がCSVファイルをダウンロードできるようになっています。
そのファイルをエクセル2016で開けると、登録箇所6か所はきちんとセルに格納されていました。備考欄でのHTMLも正しくセルに収まっていました。
② 備考欄でのHTMLには手を加えずそのままにして、それ以外をエクセルで編集して管理画面からアップロードしました。すると6か所の登録箇所のうちHTMLで記載した備考欄だけが表示されなくなっていました。
③ そこで管理画面から個別登録フォームの編集を開けてみると
備考欄でのHTMLが<table border=""0"" cellpadding=""0"" cellspacing=""4"" width=""97%"">というようにすべての文字列が二個の引用符で囲まれて格納されていたのです。
④ 個別登録フォームの備考欄には「タグ有効。改行無効」とあります。それを理解できていないことに起因するのでしょうか?

全く素人ですのでうまく説明できません。ご寛容にお願いいたします。

お礼日時:2020/02/09 07:12

CSV 変換したものをメモ帳などで見ると「"<table border=""0"" cellpadding=""0"" cellspacing=""4"" width=""97%"">"」のように前後にも「"」が付いています。


この CSV ファイルは何か別で使われるのでしょうか?
それでしたらマクロ(VBA)を使えば簡単に出来ます。マクロとかは使えますか?
例えばA列だけにデータが有るなら以下のマクロを実行すると、お好みの CSV ファイルがブックと同じフォルダに保存されるはずです。もちろん列を増やすことも別のフォルダーに変える事も情報をいただければ可能です。

Sub Sample()

Dim 行 As Long

 Open ThisWorkbook.Path & "\Data.csv" For Output As #1
 For 行 = 1 To Cells(Rows.Count, 1).End(xlUp).Row
  Print #1, Cells(行, 1).Value
 Next
 Close #1

End Sub
    • good
    • 0
この回答へのお礼

ありがとうございます。マクロ(VBA)は触れずにいましたが、この機に学習してみます。そのうえで、また質問させていただくことになりましたら、よろしくお願いいたします。

お礼日時:2020/02/08 06:13

CSVには「そのままでは カンマを含む文字列を表記できない(区切り文字との区別が付かない)」という欠点があります。


そのため「文字列は " でくくる。"でくくられた中にあるカンマは区切りには使わない」という規則を適用します。
ただし、この方法では「文字列中に " があると、 " という文字なのか、文字列の終りなのかの区別がつかない」という別の問題が出てきます。
そこで「文字列中の " は "" と2つ並べることで、文字列終了の " と区別する」という方法と取ります。

これを逆にするには、 "が一つ〜"が一つの間の文字列はそのまま抜き出し、その外のカンマでデータを区切る。
→ 文字列の中の"" を " にする
という変換が必要です。


CSVからどうやって処理しているかが書いてないので、上記の程度のことしか言えません。
この回答への補足あり
    • good
    • 0
この回答へのお礼

理解できないことなのですが、ブラウザをFirefoxからIEに変えて、CSVをアップロードしたみたら、正確なHTMLが表示されました!!!。おさがわせいたしました。寄り添ってくださってありがとうございました。

お礼日時:2020/02/10 06:58

お探しのQ&Aが見つからない時は、教えて!gooで質問しましょう!