teratail header banner
teratail header banner
質問するログイン新規登録

質問編集履歴

2

タイトル変更

2019/08/25 06:51

投稿

Reach
Reach

スコア735

title CHANGED
@@ -1,1 +1,1 @@
1
- 【VBS】【LibreOffice】【OpenOffice】ファイルの保存ができない
1
+ 【VBS】【LibreOffice】【OpenOffice 解決済み】ファイルの保存ができない
body CHANGED
File without changes

1

OpenOfficeでは 解決したので

2019/08/25 06:51

投稿

Reach
Reach

スコア735

title CHANGED
File without changes
body CHANGED
@@ -43,4 +43,90 @@
43
43
 
44
44
  call oCalcDoc.store()
45
45
 
46
+ ```
47
+ LibreOfficeでは エラーが出ますが OpenOffice では 下記コードで 動作するみたいです
48
+ ```vbs
49
+ call SaveFile(oFile)
50
+
51
+ Function urlEncode(str)
52
+ Dim oSjisStream, oUTFStream
53
+ Dim strSjis, strUTF, strEnc
54
+ Dim result()
55
+ Dim space
56
+ space = "%20"
57
+ urlEncode = ""
58
+ If str = "" Then Exit Function
59
+ '
60
+ set oUTFStream = CreateObject("ADODB.Stream")
61
+ oUTFStream.Mode = 3
62
+ oUTFStream.Type = 2 'text data
63
+ oUTFStream.CharSet = "UTF-8"
64
+ oUTFStream.Open
65
+ oUTFStream.WriteText str
66
+ '
67
+ oUTFStream.Position = 0 'rewaind
68
+ oUTFStream.Type = 1 'binary data
69
+ oUTFStream.Position = 3
70
+ strUTF = oUTFStream.Read
71
+ ReDim result(UBound(strUTF)+1) 'into byte array
72
+ For i=1 To UBound(strUTF)+1
73
+
74
+ b = AscB(MidB(strUTF, i, 1))
75
+
76
+ if (b >= 97 and b<= 122) or (b >= 65 and b<= 90) or (b >= 48 and b<= 57) or (b >= 45 and b<= 46) or (b = 95) or (b = 126) then
77
+ result(i) = Chr(b)
78
+ ElseIf b = 32 then
79
+ result(i) = space
80
+ ElseIf (b >= 0 and b<= 15) then
81
+ result(i) = "%0" & Hex(b)
82
+ Else
83
+ result(i) = "%" & Hex(b)
84
+ end if
85
+ Next
86
+
87
+ urlEncode = Join(result, "")
88
+
89
+
90
+ set oSjisStream = Nothing
91
+ set oUTFStream = Nothing
92
+ End Function
93
+
94
+ SUB SaveFile(oFile)
95
+
96
+
97
+
98
+ Dim saveparam0,saveparam1,saveparam2
99
+ Dim storeProps(2)
100
+
101
+ passname = "file:///" + urlEncode(oFile)
102
+
103
+ passname = Replace(passname,"\","/")
104
+ passname = Replace(passname,"%5C","/")
105
+ passname = Replace(passname,"%3A",":")
106
+ passname = Replace(passname,"%2E",".")
107
+
108
+
109
+ Set saveparam0 = OSM.Bridge_GetStruct("com.sun.star.beans.PropertyValue")
110
+ saveparam0.Name = "URL"
111
+ saveparam0.Value = passname
112
+ Set storeProps(0) = saveparam0
113
+
114
+ Set saveparam1 = OSM.Bridge_GetStruct("com.sun.star.beans.PropertyValue")
115
+ saveparam1.Name = "FilterName"
116
+ saveparam1.Value = "MS Excel 97"
117
+ Set storeProps(1) = saveparam1
118
+
119
+ Set saveparam2 = OSM.Bridge_GetStruct("com.sun.star.beans.PropertyValue")
120
+ saveparam2.Name = "Overwrite"
121
+ saveparam2.Value = True
122
+ Set storeProps(2) = saveparam2
123
+
124
+ dim Frame , DispatchHelper
125
+ Set Frame = oCalcDoc.getCurrentController().getFrame()
126
+
127
+ Set DispatchHelper = OSM.createInstance("com.sun.star.frame.DispatchHelper")
128
+ call DispatchHelper.executeDispatch(Frame, ".uno:SaveAs", "", 0, storeProps)
129
+
130
+
131
+ end sub
46
132
  ```