Officeの機能にあるWeb からデータを取り出す事を
C#で実現したいのですが教えてください
ちなみにOfficeの操作をマクロに記録したものが以下になります
With ActiveSheet.QueryTables.Add(Connection:= _
URL; http://quote.yahoo.co.jp/q?s=1234&d=v1, Destination:=Range(A1))
.Name = q?s=9943&d=v1
.FieldNames = True
.RowNumbers = False
.FillAdjacentFormulas = False
.PreserveFormatting = True
.RefreshOnFileOpen = False
.BackgroundQuery = True
.RefreshStyle = xlInsertDeleteCells
.SavePassword = False
.SaveData = True
.AdjustColumnWidth = True
.RefreshPeriod = 0
.WebSelectionType = xlSpecifiedTables
.WebFormatting = xlWebFormattingNone
.WebTables = 11
.WebPreFormattedTextToColumns = True
.WebConsecutiveDelimitersAsOne = True
.WebSingleBlockTextImport = False
.WebDisableDateRecognition = False
.WebDisableRedirections = False
.Refresh BackgroundQuery:=False
End With
End Sub
>Officeの機能にあるWeb からデータを取り出す事を
>C#で実現したいのですが教えてください
どんな形式のデータを、どのような状態で取り出したいのでしょう?
ごく単純に、与えられた URL から byte 配列や Stream としてデータを取得するだけな
ら、WebClient クラスでできます。
>ごく単純に、与えられた URL から byte 配列や Stream としてデータを取得するだけ
な
>ら、WebClient クラスでできます
ありがとうございます
早速サンプルを探し
byte[] myDatabuffer = myWebClient.DownloadData (uriSuffix);
string download = Encoding.ASCII.GetString(myDatabuffer);
などを使って、htmlソースやデータを得ることは成功しましたが
罫線に囲まれたデータの摘出がうまくいきません
なにかそれに役立ちそうなコマンドがあれば教えてください
>罫線に囲まれたデータの摘出がうまくいきません
「罫線に囲まれたデータ」とは、具体的にどんな形式なのでしょう?
>「罫線に囲まれたデータ」とは、具体的にどんな形式なのでしょう?
例えば下記のURLにあるような株価データです
http://quote.yahoo.co.jp/q?s=4689&d=v1
コード 市場 名称 取引値 前日比 出来高 関連情報
4689 東証1部 ヤフー(株) 12/22 1,320,000 +10,000 +0.76% 3,021
こんな感じに摘出したいのですが・・
(カンマは邪魔ですが)
エンコードに ASCII を指定しているのが最初の問題点。
日本語ページなのに ASCII を指定していることが
おかしいことに気付いてください。
で、Yahoo! は通常 EUC コードなんで
「EUC-JP」を指定してやりましょう。
まさか
>例えば下記のURLにあるような株価データです
> http://quote.yahoo.co.jp/q?s=4689&d=v1
のページにある「HTML 文書」から
>コード 市場 名称 取引値 前日比 出来高 関連情報
>4689 東証1部 ヤフー(株) 12/22 1,320,000 +10,000 +0.76% 3,021
という「データ」を抽出したいんですか?
そら大変だ。
1個や2個の命令くらいでそんなこと出来たらプログラミングなんて作業はいらないっ
すねーw
考え付くところでは
・真面目に HTMLDOM を解析して目的のデータを抽出する
・対象のページの特性を探して文字列抽出する
なんて感じです。
>1個や2個の命令くらいでそんなこと出来たらプログラミングなんて作業はいらない
っすねーw
耳が痛い・・・
やっぱりVBAで我慢するかな;
>「EUC-JP」を指定してやりましょう。
ユニコードやUTF7, UTF8 を指定できますが
Encoding.EUC-JP.GetString(myDatabuffer);
とするとコンパイルエラーになります?
>やっぱりVBAで我慢するかな;
運用で困らないならそれも手です。
言語自体の設計思想が違うので、C# に VBA のような簡潔さを求めるの無意味です。
逆に、キメ細かな処理の記述や、精密なエラーハンドリングなどを VBA に求めても無駄
です。
データソースとなる Web ページの構造にかなり仮定を持ち込んでも、C# では、最初の
投稿に書かれた VBA より短いコードで記述するのは難しいです。
>とするとコンパイルエラーになります?
なるでしょうねぇ。
そこで Encoding クラスの仕様について
調べるべきことに気付いてください。
それでも分からなければ
もう一度きいてください。
>そこで Encoding クラスの仕様について
>調べるべきことに気付いてください。
>それでも分からなければ
>もう一度きいてください。
期待を裏切るようで悪いですがさっぱりわかりません
自慢ではないですがサンプルソースも無くヘルプの仕様だけ読んで
理解できるレベルではありません
MSの格調高い解説は私とは相性が悪いようです(^^)
相性が悪いで片づけてしまうのですか?
わたしも MS のドキュメントは慣れるまで苦労しましたが
今では普通に意味が分かるようになりました。
はじめから楽に読んでいた訳ではありません。
わたしは好意の回答者ではなく、
質問者が自力で階段を上るのを見てるのが好きなだけですから
本人にやる気がないと判断した場合は見捨てます。
そうなったときは他の人にあたってください。
本題。Encoding クラスで「概要」をみると
しっかりこんなのが書いてあるんですが。
>GetEncoding メソッドは、他のエンコーディングを取得するために、
>コード ページまたは名前パラメータと共に使用します。
>>GetEncoding メソッドは、他のエンコーディングを取得するために、
>>コード ページまたは名前パラメータと共に使用します。
やっとわかりました
>質問者が自力で階段を上るのを見てるのが好きなだけですから
という事なので答えは伏せておきましょう(^^)
データの摘出はHTMLの文法の解読が必要ということで
ひとまずここで解決とさせていただきます
ありがとうございました
>という事なので答えは伏せておきましょう(^^)
そういうのもどうかなぁ。
>データの摘出はHTMLの文法の解読が必要ということで
>ひとまずここで解決とさせていただきます
手が無いわけではないですが、Excel VBA のような短いコードで実現するのは無理で
す。
サーバサイドでの実行を考えていなければ、ブラウザコントロールを使うことで多少手
間を軽減させることができます。