Excelファイル読み込みとデータ追加の方法と共有リソースのパス設定について

このQ&Aのポイント
  • Notes開発で、Excelファイルを読み込みデータを追加する方法についての質問です。
  • ビュー内の選択している文書からデータを取得し、読み込んだExcelファイルに書き足す方法を知りたいです。
  • また、マイドキュメント内のファイルではなく、共有リソース内に保存されている同じデータを開く方法についても教えてください。
回答を見る
  • ベストアンサー

Notes 開発で、 excelファイルを読み込みデータを追加したい。

現在notes7で開発を行っている(初心者)なのですが ビュー内の選択している文書からデータを取ってきて 読み込んだexcelファイルに書き足していきたいのですが、 任意のexcelを開くところまではネットを参考にして出来たのですが 詳細を理解していないため、そのファイルにデータを書き足していくことが出来ません。アドバイスをお願い致します。 現在作ってあるプログラムが以下です。 ' 既存のEXCELワークブックを開く Dim xlApp As Variant ' Excelオブジェクト ' マイドキュメントの指定ファイルを開く Dim wsh As Variant, fso As Variant Dim FilePath As String, FileName As String Set wsh = CreateObject("WScript.Shell") Set fso = CreateObject("Scripting.FileSystemObject") FilePath = wsh.SpecialFolders("MyDocuments") FileName = FilePath & "\sample.xls" If Not fso.FileExists(FileName) Then Msgbox "ファイルがありません。" & Chr(13) & FileName, 16 Exit Sub End If Set xlApp = CreateObject("Excel.Application") ' Excel OLE起動 xlApp.Workbooks.Open FileName xlApp.Visible = True これで、ファイルは開けます。ちなみにビュー内の選択文書の取り込みは出来てます。後は、そのデータをエクセルに書き出すだけなのですが そこが解りません。 それと、現在マイドキュメント内のファイルを読み込んでますが 同じデータを共有リソースの中に保存してあるので、そっちから開きたいのですが、パスをどのように設定すればいいのか解りません。 すみませんが、アドバイスをお願い致します。

  • pen123
  • お礼率58% (222/377)

質問者が選んだベストアンサー

  • ベストアンサー
  • gex
  • ベストアンサー率90% (9/10)
回答No.1

ひとまず、書き出しの方から回答いたします。 エクセルファイルの取得まではできているようですので、今後は「シートオブジェクトの取得」->「セルを指定して処理」の流れでプログラムを作成すればよいと思います。 例えば、作成済みのプログラムの次に以下のコードを追記すれば、Excelに書き出しができると思います。 Dim xlWorksheet As Variant 'エクセル・シート 'シート名を指定してシートオブジェクトを取得 Set xlWorkSheet = xlApp.WorkSheets( "Sheet1" ) 'セルの1行1列目に「あああああ」という文字をセット xlWorksheet.cells(1,1).Value = "あああああ" 既に文書の取り込みができているとのことですので、例えば文書オブジェクトがdocだとしたら、以下のコードで実現できるのではないでしょうか。 '文書上のxxxxxフィールドの値を、Excelの1行1列目にセット xlWorksheet.cells(1,1).Value = doc.GetItemValue( "xxxxx")(0) 蛇足ですが、サイズ幅の変更のような処理も可能です。(マクロをNotes上から実行させるイメージです) xlWorksheet.cells(1,1).ColumnWidth = 4.13

その他の回答 (2)

  • gex
  • ベストアンサー率90% (9/10)
回答No.3

共有リソースはそちらをさしていたのですね、了解いたしました。 ただし、そうなると、申し訳ありませんが、あまり期待にそえる回答ができなそうです。 共有リソースは、例えば複数のフォームで同じロゴの画像イメージを使いたい場合等に、共有リソースにロゴイメージを1つだけ登録し、各フォームでは共有リソースを参照するという用途に利用いたします。(メンテナンス性とディスクサイズの削減) また、共有リソースへのパスの指定方法は、申し訳ありませんがちょっと思いつきません。(WebDAVの機能を利用すればできるかもしれませんが、各クライアントに設定が必要になることと、共有リソースは設計要素のため、編集には設計者権限以上が必要となってしまうことから現実的ではないと思います) どのような要件から、Notes DB上にExcelファイルを共有し、そちらに直接書き込みをしたいのか、ということにもよりますが、対応としては以下の方法が考えられるかと思います。 1. Excelファイルについては、ファイルサーバーで共有する 2. Excelファイルは特定のNotes文書に添付して管理し、書き出し時には一旦ダウンロードして添付しなおすという運用にする 3. (Notes DB内の情報だけでExcelファイルが作成できる場合、)既存のファイルに書き出すのではなく、新規にExcelファイルを作成するロジックを組む

pen123
質問者

お礼

gexさん 回答ありがとうございました!! 無事に、ファイル読み込み→編集→出力 を行うことができました! 本当に助かりました! ありがとうございます。 ファイルの保持についてですが、 ご指摘のとおり共有フォルダにファイルを保存することにします! 丁寧な説明、有難うございました!

  • gex
  • ベストアンサー率90% (9/10)
回答No.2

続いて、パスの指定方法について。 「共有リソース」といっているのは、エクスプローラーでマイコンピューターの直下にある「共有ドキュメント」(私の環境はWindows XPです)のことでしょうか? それであれば、以下のように絶対パスを指定するのもありかもしれません。 FileName = "C:\Documents and Settings\All Users\Documents\sample.xls" また、頻繁に更新ファイル先を変える場合には、以下のように都度Fileパスとシート名をセットさせるのも手かもしれません。 Dim filenames As Variant 'ファイルパス&ファイル名 Dim sheetName As String 'シート名 Dim objXL As Variant 'エクセル・ファイル Dim xlWorksheet As Variant 'エクセル・シート Dim ws As New NotesUIWorkspace 'ファイルの指定 filenames = ws.OpenFileDialog( False, "上書きするファイルを選択してください",, ) If Not( Isarray( filenames ) ) Then Msgbox "処理を終了します" Exit Sub End If 'シート名の指定 sheetName = Inputbox$("読み込みを実施するシート名を入力ください") 'エクセルファイルの読み込み処理 Set objXL = getObject( filenames(0) ) 'シートの読み込み処理 Set xlWorkSheet = objXL.WorkSheets( sheetName )

pen123
質問者

お礼

早速の回答ありがとうございます! とても丁寧な説明で助かります^^ 早速明日試してみたいと思います! 共有リソースの話なのですが、マイドキュメント直下の共有フォルダのことではなく、NotesDB内に存在する共有リソースというものです。 Notes Designerで、作成中のDBの項目画面(ページやフォームなどが表示されているところ)に、共有リソース→(画像 or ファイル etc..) と設定できる箇所があり、共有リソースに1回データを取り込むと DB内のいたるところに活用でき、例えば画像ファイルを共有リソースに取り込んで、ページの2箇所にその画像を挿入したとします。 画像自体を修正し更新すると、ページ内に挿入されている画像も全て自動的に更新されるというものです。 今作っているDBはローカルで作っていますが、いずれサーバーにUPするので、マイドキュメントのファイルを参照している現在の形ではなく DB自体にファイルを保存させ、マイドキュメントにファイルを保持していなくてもデータの出力が行えるようにしたいと考えています。 てっきり、共有リソースというのが,DBが保持するデータの集まりなのかと思っていました。 方法は何でもいいのですが、上記に書いたように、DB自体に元となるEXCELファイルを保持させ それを参照してきて、データを追加していき、ファイルを出力する。ということがやりたいので、そのためのEXCELファイルの保持方法、参照方法がもし解れば教えて頂けると嬉しいです。

関連するQ&A

  • エクセルマクロ(vba)のFSO.OpenTextFileを利用したファイルへの追記について

    FSOを利用して、特定のファイルがなければ、FSO.CreateTextFileを使ってファイルを作成して、ログを記入します。 特定のファイルがあれば、FSO.OpenTextFileを使って追記します。 ファイルが存在しないので新規でファイル作成を行ってからログを記入するのははうまくいくのですが、ファイルが存在するので、ファイルを開いて追記する場合ががうまくできません。 何が原因なのでしょうか? 以下がそのプログラムです。 アドバイスをよろしくお願いします。 Dim excel_folder excel_folder = ThisWorkbook.Path excel_folder = excel_folder & "\log.txt" Set objShell = CreateObject("Wscript.Shell") Dim FSO Set FSO = CreateObject("Scripting.FileSystemObject") Dim stream, data_text If FSO.fileexists(excel_folder) Then Set stream = FSO.OpenTextFile(Filename:=excel_folder, IOMode:=ForAppending, Create:=True) Else: Set stream = FSO.CreateTextFile(Filename:=excel_folder, Overwrite:=True) End If data_text = "test" stream.writeLine (data_text) stream.writeLine (vbCrLf) stream.Close

  • VB2008でEXCELのセルデータが読めません

    VB2008でEXCELを開き、セルの内容を読み込もうとしましたが読み込めません。 EXCELのオープンとセルの読み込みは下記により行いました。 Dim strExcelFile As String 'エクセルファイル Dim xlApp As Excel.Application       Dim strExcelData As String xlApp = CreateObject("Excel.Application") xlApp.Workbooks.Open(Filename:=strExcelFile) xlApp.Visible = True 'EXCELは表示されている strExcelData = xlApp.Cells(3,4).ToString EXCELの3列4行には数値が入っていますが、strExcelDataには"System._ ComObject"というデータが読み込まれています。 ToStringは、これをつけないとデータの型が違うとエラーになります。 EXCELのデータは文字型と思っていましたがこれも判りません。 VBのMicrosoft Excel9.0Object LibraryをクリックしてOKしています。 原因の見当が皆目つかず困っています。

  • 開いているXLSファイルが読み取り専用か調べる

    Dim xlApp As Excel.Application Dim xlBook As Excel.Workbook Dim xlSheet As Excel.Worksheet Set xlApp = CreateObject("Excel.Application") Set xlBook = xlApp.Workbooks.Open("C:\test.xls") Set xlSheet = xlBook.Worksheets(1) 開いたExcelファイルが読み取り専用になっているかどうかを調べるにはどうすればいいですか? ファイルの属性が読み取り専用かどうかは取得できるのですが、属性は読み取り専用ではなくても誰か他のユーザーがネットワークから開いているために読み取り専用で開いている場合もわかるようにしたいです。 お願いします。

  • パスワード付のエクセルファイルをアクセスから開く方

    アクセスからエクセルのファイルを開きたいのですがうまくできません。 エクセルにはパスワードがかかっています。 なので Dim xlApp As Object Dim xlWbk As Object Set xlApp = CreateObject("Excel.Application") xlApp.Visible = True Set xlWbk = xlApp.Workbooks.Open("C:\2010.xlsx", , , , Password:="0000") Set xlApp = Nothing としたのですが、エクセルファイルが立ち上がりパスワード入力画面が表示されます。 , , , , Password:="0000" が無視されているようです。 パスワード付のエクセルファイルをアクセスから開く方法をご教授ください。

  • VBA 新規にエクセルを開き既存のファイルを開く

    VBAで新規にエクセルのアプリケーションを起動し、 その中に既存のファイルを起動する方法は有りますか? Sub Sample() Dim appExcel As Excel.Application Dim WSH As Variant Dim strPath As String Set appExcel = New Excel.Application Set WSH = CreateObject("Wscript.Shell") strPath = ActiveWorkbook.Path With appExcel .Visible = True .Workbooks.Add .ActiveWorkbook.SaveAs (strPath & "\ test.xls") End With Set WSH = Nothing End Sub このコードは、ネットから拾ったサンプルコードなのですが 新しいアプリケーションでエクセルを立ち上げることはできたのですが 新規のブックが開いてしまい、 更に、開きたいファイルに上書き保存してしまいそうです。 新規のブックが開く原因は .Workbooks.Addで、 上書き保存する原因は .ActiveWorkbook.SaveAs だとわかってるのですが、 この部分を同変更すればいいのかがわかりません。 Workbooks.Open?Filename:="C:\Users\test.xlsx" だと、現在実行しているvbaファイルを同じ枠内で 該当のファイルが開いてしまいます。

  • EXCEL警告「置換対象のデータが見つかりません」を出ないようにしたい

    VB6からEXCELファイルを操作しています。 その中で、置換をやっているのですが、データによっては置換するデータが無い場合があります。 無い場合に、「置換対象のデータが見つかりません。~」というダイヤログボックスが出てしまうのですが、これを出さない方法が有りますでしょうか。 出さない方法がないとすれば、置換対象データがあるかどうかのチェックを先にすればいいのでしょうけど、コードが倍増しそうなものですから。 参考までにコードを付記します。 Dim xlApp As Excel.Application Dim xlBook As Excel.Workbook Dim xlSheet As Excel.Worksheet Set xlApp = CreateObject("Excel.Application") Set xlBook = xlApp.Workbooks.Open(filename) Set xlSheet = xlBook.Worksheets("Sheet1") xlSheet.Columns("A:A").Replace What:="1", Replacement:="男" xlSheet.Columns("A:A").Replace What:="2", Replacement:="女" xlSheet.Columns("A:A").Replace What:="9", Replacement:="不明"

  • 「もし既にファイルを開いているなら、開かない」

    おはようございます。 accessからExcelのブックを開く処理をしています。 VBAでファイルを開く時に、「もし既にファイルを開いているなら、開かない」 という行為をしたいのですが、どのようにすればいいでしょうか? *************************************************************************** Sub サンプル() Dim xlApp As Object Dim xlBook As Object Set xlApp = CreateObject("Excel.Application") Set xlBook = xlApp.Workbooks.Open("C:\【Excel】\料理.xlsm") xlApp.Visible = True'ファイルを開く?表示する? Set xlApp = Nothing Set xlBook = Nothing End Sub *************************************************************************** このコードの、 xlApp.Visible = Trueを、 if xlBook がまだ開いてない then xlApp.Visible = True Else End If のような事がしたいのですが、可能でしょうか? ご教授よろしくお願いします。

  • 既に開いているエクセルを閉じるには?

    既に該当のファイルが開いているのなら閉じたいのですが xlBook.Quitだとエラーになります。 Sub test1() Dim xlApp As Excel.Application Dim xlBook As Workbook Dim FileName As String FileName = "C:\test.xlsm" Set xlApp = GetObject("", "Excel.Application") 'GetObjectで合ってるか不安 Set xlBook = xlApp.Workbooks.Open(FileName) If xlBook.ReadOnly = True Then 'ファイルが開いてるのなら MsgBox "既にファイルが開いているので閉じます。" xlBook.Quit 'エラー 438 End If xlApp.Quit 'これって何のために必要? Set xlBook = Nothing 'ココを通り過ぎるのにすごく時間がかかる。 Set xlApp = Nothing End Sub と言うコードを作りました。 xlBook.Quitがダメならどのコードを使えばいいでしょう? また、 GetObject("", "Excel.Application") と言う開き方でいいのでしょうか? あと、 xlApp.Quit は何のために必要なのでしょう? タスクマネージーのプロセスを見ると、 Set xlApp = GetObject("", "Excel.Application") を通る時に新しいEXCEL.EXEが作成され、 Set xlApp = Nothing を通り過ぎる時に、そのEXCEL.EXEが消えます。 だから xlApp.Quit は不要ですか?

  • VB2008 エクセル出力

    VB2008 エクセル出力 教えていただけると助かります VB6.0使用時にエクセル出力をするために下記のようなプログラムで出力していました ※「Microsoft Excel 9.0 Object Library」を参照 Dim xlApp As EXCEL.Application Dim xlBook As EXCEL.Workbook Dim xlsheet As EXCEL.Worksheet Dim File As String File = App.Path + "\EXCEL\" + "フォーム.xls" Set xlApp = CreateObject("Excel.Application") Set xlBook = xlApp.Workbooks.Open(File) Set xlsheet = xlBook.Worksheets("テスト") xlsheet.Range("A1") = "テスト" 'フォルダ作成 If Dir("D:\", vbDirectory) = "" Then Call Mkdirs("D:\テスト") 'Worksheetを名前をつけて保存します。 xlApp.DisplayAlerts = False xlsheet.SaveAs "D:\テスト\テスト.xls" xlApp.Quit Set xlApp = Nothing Set xlBook = Nothing Set xlsheet = Nothing VB2008の場合だとどのように書けば同じように動きますか ※色々試してみましたがダメでした 「Microsoft Excel 12.0 Object Library」を参照しています

  • VB2008でEXCELのセルデータが読めません

    VB2008でEXCELを開き、セルの内容を読み込もうとしましたが読み込めません。 EXCELのオープンとセルの読み込みは下記により行いました。 Dim strExcelFile As String 'エクセルファイル Dim xlApp As Excel.Application       Dim strExcelData As String xlApp = CreateObject("Excel.Application") xlApp.Workbooks.Open(Filename:=strExcelFile) xlApp.Visible = True 'EXCELは表示されている strExcelData = xlApp.Cells(3,4).ToString EXCELの3列4行には数値が入っていますが、strExcelDataには"System._ ComObject"というデータが読み込まれています。 ToStringは、これをつけないとデータの型が違うとエラーになります。 EXCELのデータは文字型と思っていましたがこれも判りません。 VBの参照で「Microsoft Excel9.0Object Library」をクリックしてOKしていますが、チェックマークなどはつかず、正しく反映されたかについては未確認です。 原因の見当が皆目つかず困っています。 誤って「ディジタルライフ」-「その他」に同じ内容で投稿しています。