言葉にできるは武器なるらしい

言葉に文字に残していきます何事も。いつかきっと誰かの役に立つはずだから。

エクセルを使用した自動処理バッチがエラーとなってしまう時の対応方法

忘れないうちにメモりたい。

自動処理でエクセルを操作させるためにsystem32wowにDESKTOPというフォルダがなぜか必要な件。です

 

状況としては、バッチやらシェルで自動起動の処理を作成し、その中の処理においてエクセルを起動して、もともとエクセルファイルのデータを自動でcsvに変換し取込ファイルを自動生成・自動インポートする。というようなジョブを作ったが、

エクセル起動のところでどうやら失敗している状況。

 

 

「対話的ログオンをしていないときでもタスクを実行する場合である。 Excelによる処理をタスクで自動実行する場合、 対話的ログオンなしで起動しようとすると通常はExcelの起動に失敗してしまう。 ~中略~ ・管理者アカウントで該当タスクを起動する ・タスクのセキュリティ・オプションで[最上位の特権で実行する]チェック・ボックスをオンにする。 ・あらかじめ次のフォルダを作成しておく: 32bit版Windows OSの場合: %SystemRoot%\System32\config\systemprofile\Desktop 64bit版Windows OSの場合: %SystemRoot%\SysWOW64\config\systemprofile\Desktop

という事らしいです。

 

つまり仮想環境のサーバに自動実行でエクセルを起動させると失敗してしまう、

そのため仮想環境上にDesktopってフォルダを設ける。

みたいな感じ、

 

非推奨の対応方法らしいけど、やるっきゃないよな。

Macでの定期的な処理実行はcronでことたりる

mac自動起動とかタスクスケジューラとかで
検索すると、「automatorを使ってどうこう」
という具合にautomatorを使う記事ばかりがでてくるので
てっきりmacではcronは使えないものかと思ってしまった。
でも、macでもcronが普通に使えます

ってことで初めてのcronの設定だったのでメモメモ。

cronの編集


crontab -e

cornで連続して処理したい場合は一行で書く


cd /Users/work; ./test.sh


(分)(時)(日)(月)(曜日) 実行するコマンドのパス

なので毎日7時は


00 07 * * * cd /Users/work; ./test.sh

となる

いーじょう!

SQLServerで「0x8007007aで失敗」あるいは「エラーメッセージ8630」が出た時の対応

なかなか日本語でちゃんとした説明がなかったので
メモメモ。



内部エラー。ファイルe:¥sql10_katmai_t¥sql¥ntdbms¥storeng¥dfs¥startup¥dstream.cpp、行792の文字列ルーチンがHRESULT 0x8007007aで失敗しました。 
メッセージ8630、レベル16、状態1、行1 
内部クエリプロセッサのエラー:クエリプロセッサで実行中に予期しないエラーが発生しました。

 

 

このエラーに遭遇したのは今回が2回目で、1回目の時は
サーバ再起動でリランしたら問題なかった。
だが、今回はサーバ再起動しても、
Sqlserverで使用可能なメモリを9000Mから4000Mに制限しても
エラーとなった。
そのためいろいろと情報をあさった結果、

結論から言うと、下記の対応でうまく処理できた。
1.処理の対象となっているテーブルのインデックスを全て再構築する
2.念のため、サーバ再起動する
3.SQLServerで使用可能なメモリは4000Mに設定する
4.処理をリランする

この方法で解決しました。

このサイトが参考になりました。
https://feedback.azure.com/forums/908035-sql-server/suggestions/32890099-corrupt-index-after-doing-create-index-with-online


なんとなく雰囲気からすると
テーブルのデータを刷新してインサートしなおした時に
新規列があると?(←これ実は関係ないかも。)
裏でインデックスにもupdateがかかっているっぽいが
そのupdate処理が失敗している。
update+Errorが発生するたびに、エラーログを吐いているが
エラーログが長すぎて「予期せぬエラー」がおこっている。っぽい。
あるいは同時にMDMP(バイナリ クラッシュファイル)が生成されて
それの容量が馬鹿でかくなって「予期せぬエラー」がおこっている。っぽい

雰囲気としてはこんな感じ。

「伝え方が9割」を読んだ備忘録

時間がないので簡潔にメモ。

 

  1. 伝え方にも技術があった!
  2. ノーをイエスに変える技術
  3. 強い言葉をつくる技術

 


の三本立てになっている。

 


2の章では

要は、相手の考えを考慮してお互いにメリットのある頼み方をすれば、ノーがイエスになるということ。

あるいは、ただお願いするのではなく、相手に選択肢を与え、相手は選べばいいだけの状態にさせてあげる配慮が必要とか、相手が部下であれば「君にしか頼めないことなんだ」と相手のやる気を引き出す一言を添える。

こういうことを伝える技術として紹介している。

 


三章では

言葉の強調のしかたではギャップを使うと良いという内容で、単に「あなたの味方です」というよりも

「誰もが敵になっても私はあなたの味方です」などというと言葉が強力になるということである。

 


感想としては

分かってはいることだが、実践しながら徐々に習慣化していくことが大事だと思う。

 

もっと感想書きたいが
時間ないので以上。

スプレッドシートをpythonで操作するための準備

pythonスプレッドシートをいじりたいだけなのに なかなか一筋縄にいか無いのでメモメモ。

ここでやりたいこととしては、 「初めてpythonスプレッドシートに書き込みテストを行う」

です。

まずはキータさんを参考にして進めます。

参考:https://qiita.com/Hidekazu-Karino/items/5201fce7249693357602

 

Google Developers Consoleで適当にプロジェクトを作成  

 https://console.developers.google.com

ダッシュボードからAPIとサービスの有効化をクリック

Google Sheets APIを有効

 

ここから先は下記参考通りにある程度進める。

参考:https://tanuhack.com/python/operate-spreadsheet/

 

このサイト通り進めてプログラムを実行すると構文エラーになった。

pythonで「SyntaxError: Non-ASCII character」のエラーが出た場合の対処方法

ASCIIの文字列でないものが含まれていますというエラーです。

実行ファイルの先頭に下記をつけて再実行。

# coding:utf-8

 

続きまして下記のインポートエラー

from oauth2client.service_account import ServiceAccountCredentials 
ImportError: No module named oauth2client.service_account

 

パッケージ追加が必要らしい。

$ sudo pip install --upgrade oauth2client

 

ではダメで

$ sudo pip install --upgrade oauth2client --ignore-installed six

 

でなんとか行けました

pipのインストール方法

pythonのバージョンを確認したところ 2.7.10が入っており、調べたところ、2.7.9以降にはpipは自動的に入っているという 情報があったが、pipのバージョンを確認すると「そんなコマンドはねぇ」と言われたので どうやらpipは入ってい無いようだ。


XXXXX$ python --version
Python 2.7.10

XXXXX$ pip -V
-bash: pip: command not found

ということで、pipのインストール方法を調べたところ 「sudo easy_install pip」こんな簡単にインストールできるようだ。 と思って実行してみたら↓な感じでダウンロードに失敗しているようだ。

【pipのインストール方法の失敗例】


XXXXX$ sudo easy_install pip
Password:
Searching for pip
Reading https://pypi.python.org/simple/pip/
Download error on https://pypi.python.org/simple/pip/: [SSL: TLSV1_ALERT_PROTOCOL_VERSION] tlsv1 alert protocol version (_ssl.c:590) -- Some packages may not be found!
Couldn't find index page for 'pip' (maybe misspelled?)
Scanning index of all packages (this may take a while)
Reading https://pypi.python.org/simple/
Download error on https://pypi.python.org/simple/: [SSL: TLSV1_ALERT_PROTOCOL_VERSION] tlsv1 alert protocol version (_ssl.c:590) -- Some packages may not be found!
No local packages or download links found for pip
error: Could not find suitable distribution for Requirement.parse('pip')

別の方法で試したら行けたのでこちらが成功例

【pipのインストール方法の成功例】

まずはこのコマンドでpipのダウンロード


XXXXX$ curl https://bootstrap.pypa.io/get-pip.py -o get-pip.py
% Total % Received % Xferd Average Speed Time Time Time Current
Dload Upload Total Spent Left Speed
100 1622k 100 1622k 0 0 1762k 0 --:--:-- --:--:-- --:--:-- 1761k

次にインストールします。


XXXXX$ python get-pip.py
Collecting pip
Downloading https://files.pythonhosted.org/packages/c2/d7/90f34cb0d83a6c5631cf71dfe64cc1054598c843a92b400e55675cc2ac37/pip-18.1-py2.py3-none-any.whl (1.3MB)
100% |████████████████████████████████| 1.3MB 5.2MB/s 
Collecting wheel
Downloading https://files.pythonhosted.org/packages/ff/47/1dfa4795e24fd6f93d5d58602dd716c3f101cfd5a77cd9acbe519b44a0a9/wheel-0.32.3-py2.py3-none-any.whl
Installing collected packages: pip, wheel
Could not install packages due to an EnvironmentError: [Errno 13] Permission denied: '/Library/Python/2.7/site-packages/pip'
Consider using the `--user` option or check the permissions.

これは失敗。 編集権限がなかったようで、「sudo」をつけたら行けました。

 

【pipのインストール方法の成功例】


XXXXX$ sudo python get-pip.py
Password:
The directory '/Users/ryotaroakiba/Library/Caches/pip/http' or its parent directory is not owned by the current user and the cache has been disabled. Please check the permissions and owner of that directory. If executing pip with sudo, you may want sudo's -H flag.
The directory '/Users/ryotaroakiba/Library/Caches/pip' or its parent directory is not owned by the current user and caching wheels has been disabled. check the permissions and owner of that directory. If executing pip with sudo, you may want sudo's -H flag.
Collecting pip
Downloading https://files.pythonhosted.org/packages/c2/d7/90f34cb0d83a6c5631cf71dfe64cc1054598c843a92b400e55675cc2ac37/pip-18.1-py2.py3-none-any.whl (1.3MB)
100% |████████████████████████████████| 1.3MB 9.8MB/s 
Collecting wheel
Downloading https://files.pythonhosted.org/packages/ff/47/1dfa4795e24fd6f93d5d58602dd716c3f101cfd5a77cd9acbe519b44a0a9/wheel-0.32.3-py2.py3-none-any.whl
Installing collected packages: pip, wheel
Successfully installed pip-18.1 wheel-0.32.3

やっとインストール完了。

【SQLServer】batファイルから起動して、SPを呼び出して実行する方法

よく使うのでメモよく使うのでメモ


----------------------------------------------


@ECHO OFF

set current=%~dp0set SV=[ホスト名]set DB=[DB名]set US=[ユーザ名]set PW=[パスワード]
REM SPを呼び出して実行する
osql -S %SV% -U %US% -P %PW% -Q "EXEC [SP名]"
REM sqlファイルを呼び出して実行する
SQLCMD -S %SV% -d %DB% -U %US% -P %PW% -i %current%[sqlファイル].sql -s" " -W -o %current%[出力ファイル名]
REM bcpで直接テーブルを出力する
bcp dbo.[テーブル名] out "[出力先パス][出力ファイル名]" -c -S %SV% -d %DB% -U %US% -P %PW%
exit /b

 

 

覚えておくと便利