2007年11月29日木曜日
2007年11月27日火曜日
excel-->sqlserver dtsの転送で整合性エラー
null対策で
Function Main()
if isnull( DTSSource("SEHN01")) then
DTSDestination("SEHN01")=" "
else
DTSDestination("SEHN01") = DTSSource("SEHN01")
end if
Main = DTSTransformStat_OK
End Function
というスクリプトを組んでいたが通用しなくなった?ので
素直にcsvで落とすのが吉のようだ
Function Main()
if isnull( DTSSource("SEHN01")) then
DTSDestination("SEHN01")=" "
else
DTSDestination("SEHN01") = DTSSource("SEHN01")
end if
Main = DTSTransformStat_OK
End Function
というスクリプトを組んでいたが通用しなくなった?ので
素直にcsvで落とすのが吉のようだ
2007年11月22日木曜日
excel2007の範囲からpcomで転送可能なcsvを書き出す vbaに実装する
excel4.0シートをasにアップロードする転送をcsvに切り替えるには
まず ttoをbasic順次に変えて転送記述を変更
pcommの転送記述ファイルの場所を確認 "パス名\ファイル名.fdf"
書き出しファイル名、ファイルパスの決定 "パス\ファィル名.csv"
転送元範囲の書き換え MAKE_CSV_FILE内
vba実行後 csvを開いて文字列にダブルコーテーションが入っているか確認
*コードを載せただけでは解析だけで挫折して使ってもらえなそうなので書き換え↑
dimで定義をしていない部分でこけるかも
Sub make_csv1()
Dim strsws As String '転送定義 '文字列 1文字,2数字 例 1110001など
Dim startrow As Integer '範囲の何行目から読むか、1行目がタイトルなら2行目から読むので2
'fdfから定義を読み込み文字列に展開する
callfdf "パス名\ファイル名.fdf", strsws
'excelの範囲名から、定義情報に従い、csvに書き出す
MAKE_CSV_FILE "パス\ファィル名.csv", strsws, startrow
End Sub
まず ttoをbasic順次に変えて転送記述を変更
pcommの転送記述ファイルの場所を確認 "パス名\ファイル名.fdf"
書き出しファイル名、ファイルパスの決定 "パス\ファィル名.csv"
転送元範囲の書き換え MAKE_CSV_FILE内
vba実行後 csvを開いて文字列にダブルコーテーションが入っているか確認
*コードを載せただけでは解析だけで挫折して使ってもらえなそうなので書き換え↑
dimで定義をしていない部分でこけるかも
Sub make_csv1()
Dim strsws As String '転送定義 '文字列 1文字,2数字 例 1110001など
Dim startrow As Integer '範囲の何行目から読むか、1行目がタイトルなら2行目から読むので2
'fdfから定義を読み込み文字列に展開する
callfdf "パス名\ファイル名.fdf", strsws
'excelの範囲名から、定義情報に従い、csvに書き出す
MAKE_CSV_FILE "パス\ファィル名.csv", strsws, startrow
End Sub
範囲を設定するvba
マクロ記録をアレンジしただけのもの
Sub datanamecrt()
Worksheets("data").Activate
start01=3 '例
endr=cells(start01,1).end(xldown).row
if endr=65536 then
endr=start01
end if
adr = "=data!" & Range(Cells(start01, 1), Cells(endr, 11)).Address(ReferenceStyle:=xlR1C1)
ActiveWorkbook.Names.Add Name:="databse", RefersToR1C1:=adr
End Sub
Sub datanamecrt()
Worksheets("data").Activate
start01=3 '例
endr=cells(start01,1).end(xldown).row
if endr=65536 then
endr=start01
end if
adr = "=data!" & Range(Cells(start01, 1), Cells(endr, 11)).Address(ReferenceStyle:=xlR1C1)
ActiveWorkbook.Names.Add Name:="databse", RefersToR1C1:=adr
End Sub
2007年11月21日水曜日
excelの範囲名からcsv形式で書き出す 文字””で囲み数字はそのまま
目的
excel2007からpcomで送信可能なcsvを出力する
no error trap とりあえず文字に""で囲まれて数字はそのままカンマで区切られ
pcomの csv-->asの転送もエラーなく終わりました
'parm2 outfile name
'parm3 judge string? 判定のstring
'parm4 start row ’範囲の先頭行がタイトルだった場合2行のデータ行から読む
'先頭からデータの場合は1行目から読む
'vbaに組み込んで使うのを想定するので転送元ファイル名は指定しない
Sub MAKE_CSV_FILE( outfilecsv, strsws,startrow)
Dim frm(255)
Dim objHANI As Range
name1 = ActiveWorkbook.Name
'転送元範囲セット
'例 Set objHani = Range(Cells(5, 1), Cells(Cells(5, 1).End(xlDown).Row, 30))
Set objHANI = Range(rng)
'定義情報を配列に展開する
GoSub fdf
'ファイルをオープンする
Dim FNO As Integer 'ファイル番号
FNO = FreeFile '空いてるファイル番号を取出す
Open outfilecsv For Output As #FNO 'テキストファイルを新規作成
'行、列でループを作る
Dim y As Integer
Dim x As Integer
For y = startrow To objHANI.Rows.Count '行のループ
'1列目
If frm(1) = "1" Then
Print #FNO, Chr(&H22) & objHANI.Cells(y, 1).Value & Chr(&H22); '先頭項目の出力
Else
Print #FNO, objHANI.Cells(y, 1).Value; '先頭項目の出力
End If
'2列目以降
For x = 2 To objHANI.Columns.Count '列のループ
Print #FNO, ",";
If frm(x) = "1" Then '文字
Print #FNO, Chr(&H22) & objHANI.Cells(y, x).Value & Chr(&H22); '先頭項目の出力
Else '数字
Item1 = objHANI.Cells(y, x).Value
If Item1 = "" Then Item1 = "0"
Print #FNO, Item1; '先頭項目の出力
End If
Next x
Print #FNO, "" '改行のみ出力
Next y
'ファイルをクローズする
Close #FNO
Exit Sub
fdf:
For i = 1 To Len(strsws)
'ReDim frm(1)
frm(i) = Mid(strsws, i, 1)
Next
Return
End Sub
参考
VB テクニック編12 - CSV テキストファイル形式仕様、ハンドリングサンプル
freewareでexcelからcsvに出力するものがたくさんあるがどれもカンマ区切りのみだったり
すべてダブルコーテーションで囲んだりで、その項目を文字数字で判断し列として一貫性がなかったり、pcomの送信につかえないものばかり
可変長にこだわるのはexcelが文字数の制限をしなければ、固定長で転送した場合容易に
転送エラーになるから。文字数制限すればいいじゃんともいえるが、ひとつづつ設定するのが面倒
もともと列にどんだけでも入るんだからこけずに転送させてくれよと
桁はみだしたときは、はみ出したよってメッセージだけで通してねと
つうかどなたかexcel2007のpcでexcel4.0に保存するソフト作ってくれないかな。。。
こんなスクリプト?でも恥ずかしげもなく出せるのがブログのよさ?( ´∀` )
業務で運用しつつエラーが無いだったらどっかの会議室に書き込もうと思います
excel2007からpcomで送信可能なcsvを出力する
no error trap とりあえず文字に""で囲まれて数字はそのままカンマで区切られ
pcomの csv-->asの転送もエラーなく終わりました
'parm2 outfile name
'parm3 judge string? 判定のstring
'parm4 start row ’範囲の先頭行がタイトルだった場合2行のデータ行から読む
'先頭からデータの場合は1行目から読む
'vbaに組み込んで使うのを想定するので転送元ファイル名は指定しない
Sub MAKE_CSV_FILE( outfilecsv, strsws,startrow)
Dim frm(255)
Dim objHANI As Range
name1 = ActiveWorkbook.Name
'転送元範囲セット
'例 Set objHani = Range(Cells(5, 1), Cells(Cells(5, 1).End(xlDown).Row, 30))
Set objHANI = Range(rng)
'定義情報を配列に展開する
GoSub fdf
'ファイルをオープンする
Dim FNO As Integer 'ファイル番号
FNO = FreeFile '空いてるファイル番号を取出す
Open outfilecsv For Output As #FNO 'テキストファイルを新規作成
'行、列でループを作る
Dim y As Integer
Dim x As Integer
For y = startrow To objHANI.Rows.Count '行のループ
'1列目
If frm(1) = "1" Then
Print #FNO, Chr(&H22) & objHANI.Cells(y, 1).Value & Chr(&H22); '先頭項目の出力
Else
Print #FNO, objHANI.Cells(y, 1).Value; '先頭項目の出力
End If
'2列目以降
For x = 2 To objHANI.Columns.Count '列のループ
Print #FNO, ",";
If frm(x) = "1" Then '文字
Print #FNO, Chr(&H22) & objHANI.Cells(y, x).Value & Chr(&H22); '先頭項目の出力
Else '数字
Item1 = objHANI.Cells(y, x).Value
If Item1 = "" Then Item1 = "0"
Print #FNO, Item1; '先頭項目の出力
End If
Next x
Print #FNO, "" '改行のみ出力
Next y
'ファイルをクローズする
Close #FNO
Exit Sub
fdf:
For i = 1 To Len(strsws)
'ReDim frm(1)
frm(i) = Mid(strsws, i, 1)
Next
Return
End Sub
参考
VB テクニック編12 - CSV テキストファイル形式仕様、ハンドリングサンプル
freewareでexcelからcsvに出力するものがたくさんあるがどれもカンマ区切りのみだったり
すべてダブルコーテーションで囲んだりで、その項目を文字数字で判断し列として一貫性がなかったり、pcomの送信につかえないものばかり
可変長にこだわるのはexcelが文字数の制限をしなければ、固定長で転送した場合容易に
転送エラーになるから。文字数制限すればいいじゃんともいえるが、ひとつづつ設定するのが面倒
もともと列にどんだけでも入るんだからこけずに転送させてくれよと
桁はみだしたときは、はみ出したよってメッセージだけで通してねと
つうかどなたかexcel2007のpcでexcel4.0に保存するソフト作ってくれないかな。。。
こんなスクリプト?でも恥ずかしげもなく出せるのがブログのよさ?( ´∀` )
業務で運用しつつエラーが無いだったらどっかの会議室に書き込もうと思います
pcom転送記述FDFから文字数字の判定を切り出す
目的
excel2007で4.0シートが使えなくなったのでエクセルから可変長ファイルでasへ転送を可能にする
excel2007-->csv--pcom-->asの実現
excelはブランクセルがあり列の文字数字の判定が難しい。あらかじめ数字列のブランクに0を埋め込むことで判定は可能だがasの転送記述をもとに転送するので同じ基準で転送した方が間違いが少ないと
思われる
まず転送記述FDFから文字数字の判定を切り出す
fdfとは
PCFDF
PCFT 3
PCFO 1,1,3,1,1
PCFL KOTE 1 5
PCFL REC 2 7
PCFL JMHN 1 10
PCFL HRHN 1 12
PCFL BIKO 1 12
PCFL DESC 1 3
PCFL HN83 1 3
PCFL MF 1 2
PCFL NDT 2 9
PCFL BSU 2 12/3
PCFL BM 1 2
転送記述であるが スペースで区切った3項目目1が文字2が数字をあらわす
4行目からフィールドの判定項目が始る
結果はstrswsという文字列に書き出す
strsws="121111112222" ←こんな感じの結果
Sub callfdf(in_file As String, strsws As String)
'fdffile asの転送記述ファイル,
Dim frm(255)
'in_file = "パス\hr01.fdf"
'** ファイルオープン
FNO = FreeFile
Open in_file For Input As FNO Len = 32000
x = 1
Do Until EOF(FNO)
Line Input #FNO, rec
'4行目から処理
If x >= 4 Then
len1 = Len(rec)
Count1 = 0
For i = 1 To Len(rec)
If Mid(rec, len1 - i, 1) = " " Then Count1 = Count1 + 1
'右から読み込んで2番目のスペースの左から1ケタ分読み込む
'PCFL MF 1 1 mf=フィールド名,文字数字種別,桁数 文字数字種別1=文字、2=数字
If Count1 = 2 Then
frm(x - 3) = Mid(rec, len1 - i + 1, 1)
Exit For
End If
Next
End If
x = x + 1
Loop
Dim y As Integer
'読みだした配列を文字列に書き出す
For y = 1 To 255
strsws = strsws & frm(y)
len2 = Len(strsws)
Next
Close FNO
End Sub
excel2007で4.0シートが使えなくなったのでエクセルから可変長ファイルでasへ転送を可能にする
excel2007-->csv--pcom-->asの実現
excelはブランクセルがあり列の文字数字の判定が難しい。あらかじめ数字列のブランクに0を埋め込むことで判定は可能だがasの転送記述をもとに転送するので同じ基準で転送した方が間違いが少ないと
思われる
まず転送記述FDFから文字数字の判定を切り出す
fdfとは
PCFDF
PCFT 3
PCFO 1,1,3,1,1
PCFL KOTE 1 5
PCFL REC 2 7
PCFL JMHN 1 10
PCFL HRHN 1 12
PCFL BIKO 1 12
PCFL DESC 1 3
PCFL HN83 1 3
PCFL MF 1 2
PCFL NDT 2 9
PCFL BSU 2 12/3
PCFL BM 1 2
転送記述であるが スペースで区切った3項目目1が文字2が数字をあらわす
4行目からフィールドの判定項目が始る
結果はstrswsという文字列に書き出す
strsws="121111112222" ←こんな感じの結果
Sub callfdf(in_file As String, strsws As String)
'fdffile asの転送記述ファイル,
Dim frm(255)
'in_file = "パス\hr01.fdf"
'** ファイルオープン
FNO = FreeFile
Open in_file For Input As FNO Len = 32000
x = 1
Do Until EOF(FNO)
Line Input #FNO, rec
'4行目から処理
If x >= 4 Then
len1 = Len(rec)
Count1 = 0
For i = 1 To Len(rec)
If Mid(rec, len1 - i, 1) = " " Then Count1 = Count1 + 1
'右から読み込んで2番目のスペースの左から1ケタ分読み込む
'PCFL MF 1 1 mf=フィールド名,文字数字種別,桁数 文字数字種別1=文字、2=数字
If Count1 = 2 Then
frm(x - 3) = Mid(rec, len1 - i + 1, 1)
Exit For
End If
Next
End If
x = x + 1
Loop
Dim y As Integer
'読みだした配列を文字列に書き出す
For y = 1 To 255
strsws = strsws & frm(y)
len2 = Len(strsws)
Next
Close FNO
End Sub
csv
表範囲CSV出力「明日葉」
http://www.vector.co.jp/soft/dl/win95/business/se174370.html
数字文字の判定なくすべて""で囲まれ使えない
pcom のas-->pc biff4ではフィールドの数字には0,文字のブランクセルはブランクで作れれる
excel2003以前でexcel4.0で保存すると数字フィールドでもブランクにおきからえられる
pc-->as時の判定はfdfにフールドが文字か数字か書いてあるのでそれで送信されている
as-->pc biff4と pc -->as biff4では数字が前者では入っていて後者では入っていなくても
問題なく転送されていた
http://www.vector.co.jp/soft/dl/win95/business/se174370.html
数字文字の判定なくすべて""で囲まれ使えない
pcom のas-->pc biff4ではフィールドの数字には0,文字のブランクセルはブランクで作れれる
excel2003以前でexcel4.0で保存すると数字フィールドでもブランクにおきからえられる
pc-->as時の判定はfdfにフールドが文字か数字か書いてあるのでそれで送信されている
as-->pc biff4と pc -->as biff4では数字が前者では入っていて後者では入っていなくても
問題なく転送されていた
2007年11月17日土曜日
ophcrack モードの変更
ophcrackをブートして ubuntuが立ち上がらずblack screenになってしまうことがあります
テキストモードで起動すると cannt open display などと表示されます
解決策は分かりません(´・ω・`) がモードの替え方は分かったので書きます
google で ophcrack text modeで検査するとすぐ出てくる情報ではあります
boot時にtabキーを押す指示が出て入れるコマンドを要求されますが
kernel /以下を入れるとモードの変更が出来ます
リンク
title Ophcrack LiveCD Graphics mode (auto mode)
find --set-root /boot/vmlinuz
kernel /boot/vmlinuz vga=769 ramdisk_size=6666 root=/dev/ram0 rw autoexec=xconf;startx
initrd /boot/initrd.gz
title Ophcrack LiveCD Graphics mode (VESA mode)
find --set-root /boot/vmlinuz
kernel /boot/vmlinuz vga=769 ramdisk_size=6666 root=/dev/ram0 rw autoexec=startx
initrd /boot/initrd.gz
title Ophcrack LiveCD (if kernel hangs in other modes)
find --set-root /boot/vmlinuz
kernel /boot/vmlinuz vga=769 ramdisk_size=6666 root=/dev/ram0 acpi=off noagp nopcmcia noapm nousb rw autoexec=xconf;startx
initrd /boot/initrd.gz
title Dump hashes automatically in text mode
find --set-root /boot/vmlinuz
kernel /boot/vmlinuz vga=normal ramdisk_size=6666 root=/dev/ram0 rw autoexec=/root/dump_hash.sh
initrd /boot/initrd.gz
title Ophcrack LiveCD Text mode (to configure X manually)
find --set-root /boot/vmlinuz
kernel /boot/vmlinuz vga=normal ramdisk_size=6666 root=/dev/ram0 rw
initrd /boot/initrd.gz
テキストモードで起動すると cannt open display などと表示されます
解決策は分かりません(´・ω・`) がモードの替え方は分かったので書きます
google で ophcrack text modeで検査するとすぐ出てくる情報ではあります
boot時にtabキーを押す指示が出て入れるコマンドを要求されますが
kernel /以下を入れるとモードの変更が出来ます
リンク
title Ophcrack LiveCD Graphics mode (auto mode)
find --set-root /boot/vmlinuz
kernel /boot/vmlinuz vga=769 ramdisk_size=6666 root=/dev/ram0 rw autoexec=xconf;startx
initrd /boot/initrd.gz
title Ophcrack LiveCD Graphics mode (VESA mode)
find --set-root /boot/vmlinuz
kernel /boot/vmlinuz vga=769 ramdisk_size=6666 root=/dev/ram0 rw autoexec=startx
initrd /boot/initrd.gz
title Ophcrack LiveCD (if kernel hangs in other modes)
find --set-root /boot/vmlinuz
kernel /boot/vmlinuz vga=769 ramdisk_size=6666 root=/dev/ram0 acpi=off noagp nopcmcia noapm nousb rw autoexec=xconf;startx
initrd /boot/initrd.gz
title Dump hashes automatically in text mode
find --set-root /boot/vmlinuz
kernel /boot/vmlinuz vga=normal ramdisk_size=6666 root=/dev/ram0 rw autoexec=/root/dump_hash.sh
initrd /boot/initrd.gz
title Ophcrack LiveCD Text mode (to configure X manually)
find --set-root /boot/vmlinuz
kernel /boot/vmlinuz vga=normal ramdisk_size=6666 root=/dev/ram0 rw
initrd /boot/initrd.gz
2007年11月16日金曜日
2007年11月8日木曜日
excel2007環境で dtsでexcel4.0シートを受信するには activex
excel2007環境になって excel4.0シートでの保存ができなくなりました
asからsqlserverに受信するときpcom excel4.0シートを介して転送している処理がすべてこけるようになってしまった。
dts activeXスクリプトサンプル
*saveas がexcel2003の環境でこける(?)のでバージョン判定追加
KazzzのJとNのはざまで 参考
Function Main()
Set xlsobj = CreateObject("excel.application")
With xlsobj
.DisplayAlerts =false
bookname="c:\My Documents\tenso\filename.xls"
bookname1="filename.xls"
.Workbooks.Open bookname
.Workbooks(bookname1).activate
if cint(.Application.Version) <12
.ActiveWorkbook.Saveas bookname
else
.ActiveWorkbook.Saveas bookname,56
end if
.ActiveWorkbook.Close
.DisplayAlerts =true
End With
Set xlsobj = Nothing
Main = DTSTaskExecResult_Success
End Function
エクセルの保存形式56については KazzzのJとNのはざまで
asからsqlserverに受信するときpcom excel4.0シートを介して転送している処理がすべてこけるようになってしまった。
dts activeXスクリプトサンプル
*saveas がexcel2003の環境でこける(?)のでバージョン判定追加
KazzzのJとNのはざまで 参考
Function Main()
Set xlsobj = CreateObject("excel.application")
With xlsobj
.DisplayAlerts =false
bookname="c:\My Documents\tenso\filename.xls"
bookname1="filename.xls"
.Workbooks.Open bookname
.Workbooks(bookname1).activate
if cint(.Application.Version) <12
.ActiveWorkbook.Saveas bookname
else
.ActiveWorkbook.Saveas bookname,56
end if
.ActiveWorkbook.Close
.DisplayAlerts =true
End With
Set xlsobj = Nothing
Main = DTSTaskExecResult_Success
End Function
エクセルの保存形式56については KazzzのJとNのはざまで
2007年11月5日月曜日
2007年11月3日土曜日
フォルダが開くない マイミュージック
マイミュージック下にフォルダを誤って移動
エクスプローラでマイミュージックを開くとcpuが高負荷になって開かなくなった
excelファイルを開くからは開く
復帰方法
セーフモードで開くとなぜか開くのでフォルダを元の位置に戻したら正常に開くようになった
エクスプローラでマイミュージックを開くとcpuが高負荷になって開かなくなった
excelファイルを開くからは開く
復帰方法
セーフモードで開くとなぜか開くのでフォルダを元の位置に戻したら正常に開くようになった
登録:
投稿 (Atom)