找回密码  加入

AUTOIT CN

搜索
查看: 170|回复: 7

[AU3基础] EXCEL的CSV檔案單一儲存格處理

[复制链接]
发表于 2019-5-12 03:00:38 | 显示全部楼层 |阅读模式


  各位大家好:

     今天又來發問順便賺金幣。此次要詢問的是EXCEL 函數處理。
    因有一個檔案為 CSV檔,以 "," 作為分隔。是用來準備匯入SQLITE 資料庫內。
    但是有一個問題,因如果欄位儲存格有多行資料,例如附件檔的CSV檔案中欄位 F4,跟F9 這兩個儲存格
    因有CHR(10),CHR(13) 也就是有 @CRLF  不可見字元。
    在匯入SQLITE 時會因為資料不對齊(欄位數不相符)無法匯入,因此參考函數寫法後就用偷雞方式處理。
    資料是可以匯入啦,但是有多行的資料儲存格這欄位資料卻怎麼處理也無法分隔,
    例如F9欄位無法隔離造成連字狀況, 變成6_86_8_16_8_26_8_3想要處理成6_8*6_8_1*6_8_2*6_8_3類似格式的方式
    是否有比較適合的寫法?
    附上原始碼。
  1. #include <FileConstants.au3>
  2. #include <Excel.au3>
  3. #include <MsgBoxConstants.au3>

  4. Local $CSV_Data_Path = FileOpenDialog("選擇檔案", @ScriptDir & "\", "(*.CSV)", $FD_FILEMUSTEXIST + $FD_MULTISELECT)
  5. Local $oExcel = _Excel_Open()
  6. Local $oWorkbook = _Excel_BookOpen($oExcel, $CSV_Data_Path)
  7. Sleep(1000)
  8. ;使用EXCEL開啟檔案,發現某欄位儲存格有多行資料例如: F4; F9 等欄位
  9. _Excel_RangeInsert($oWorkbook.Activesheet, "G:G", $xlShiftToRight ) ;插入一欄

  10. _Excel_RangeWrite($oWorkbook, $oWorkbook.Activesheet, "=CLEAN(F1)", "G1") ;寫入清除不可見字元碼像"CRLF" CHR(10) CHR(13)等
  11. _Excel_RangeCopyPaste($oWorkbook.Activesheet, "G1", "G2:G23", Default, $xlPasteFormats) ; 粘贴格式到目标范围範圍大小須定義

  12. Local $sWorkbook = @ScriptDir & "\TEST-DATA-2.CSV"
  13. _Excel_BookSaveAs($oWorkbook, $sWorkbook, $xlCSV, True)

  14. _Excel_BookClose($oWorkbook, True)

  15. Local $CSV_Data_Path = @ScriptDir & "\TEST-DATA-2.CSV"
  16. Local $oExcel = _Excel_Open()
  17. Local $oWorkbook = _Excel_BookOpen($oExcel, $CSV_Data_Path)
  18. Local $sRange = "F:F"
  19. _Excel_RangeDelete($oWorkbook.ActiveSheet, $sRange, $xlShiftToLeft) ;刪除舊欄位不可見字元
复制代码


本帖子中包含更多资源

您需要 登录 才可以下载或查看,没有帐号?加入

x
发表于 2019-5-14 14:53:08 | 显示全部楼层
本帖最后由 chzj589 于 2019-5-14 15:21 编辑
yohoboy 发表于 2019-5-13 23:43
感謝回覆,圖上的資料是我最後顯示的結果,只是想要將原本分行的格內資料去除@CRLF後再替換其他符號,也 ...

这样子:
用<字符串管理>函数处理:

  1. For $i = 1 To 26
  2.         ; 读取工作簿中活动工作表指定单元格的数据
  3.         Local $aResult = _Excel_RangeRead($oWorkbook, Default, "F" & $i)
  4.     $iLengthA = StringLen($aResult)
  5.         Local $StripWS = StringStripWS($aResult, 8)
  6.         If $iLengthA > 6 And $iLengthA < 10 Then
  7.                 Local $sString = StringMid($StripWS, 1, 3) & "*" & StringMid($StripWS, 4, 5)
  8.                 _Excel_RangeWrite($oWorkbook, $oWorkbook.Activesheet, $sString, "G4")
  9.         ElseIf $iLengthA > 11 And $iLengthA < 23 Then
  10.                 Local $sString = StringMid($StripWS, 1, 3) & "*" & StringMid($StripWS, 4, 5) & "*" & StringMid($StripWS, 9, 5) & "*" & StringMid($StripWS, 14, 5)
  11.                 _Excel_RangeWrite($oWorkbook, $oWorkbook.Activesheet, $sString, "G9")
  12.         EndIf
  13. Next

复制代码





本帖子中包含更多资源

您需要 登录 才可以下载或查看,没有帐号?加入

x
回复 支持 1 反对 0

使用道具 举报

 楼主| 发表于 2019-5-12 03:02:06 | 显示全部楼层
忘了附上圖片。

本帖子中包含更多资源

您需要 登录 才可以下载或查看,没有帐号?加入

x
发表于 2019-5-13 09:21:50 | 显示全部楼层
本帖最后由 chzj589 于 2019-5-13 09:23 编辑
yohoboy 发表于 2019-5-12 03:02
忘了附上圖片。



>运行 AU3Check (3.3.14.2) 检查代码.  参数: D:\AutoIt3  au3 文件: D:\AU3调试\SQLite\SQLite\学生成绩统计\CSV-DATA-INPUT\CSV-DATA-INPUT.au3
+>09:18:53 AU3Check 语法检查结束.rc: 0
>运行:D:\AutoIt3\autoit3_x64.exe(3.3.14.2), 脚本: D:\AutoIt3\autoit3_x64.exe "D:\AU3调试\SQLite\SQLite\学生成绩统计\CSV-DATA-INPUT\CSV-DATA-INPUT.au3"   

本帖子中包含更多资源

您需要 登录 才可以下载或查看,没有帐号?加入

x
 楼主| 发表于 2019-5-13 23:43:46 | 显示全部楼层
chzj589 发表于 2019-5-13 09:21
>运行 AU3Check (3.3.14.2) 检查代码.  参数: D:\AutoIt3  au3 文件: D:\AU3调试\SQLite\SQLite\学生 ...

感謝回覆,圖上的資料是我最後顯示的結果,只是想要將原本分行的格內資料去除@CRLF後再替換其他符號,也就是F9格內最終顯示為6_8*6_8_1*6_8_2*6_8_3,目前可行的做法好像用正則方式去處理,可惜我還沒研究透,所以看看哪個高人可以寫出來。
发表于 2019-5-15 11:02:08 | 显示全部楼层
chzj589 发表于 2019-5-14 14:53
这样子:
用函数处理:

判断10行以上有BUG,需修改。




本帖子中包含更多资源

您需要 登录 才可以下载或查看,没有帐号?加入

x
发表于 7 天前 | 显示全部楼层
chzj589 发表于 2019-5-15 11:02
判断10行以上有BUG,需修改。

无聊,修改了判断,可对9999行进行判断。





本帖子中包含更多资源

您需要 登录 才可以下载或查看,没有帐号?加入

x
发表于 7 天前 | 显示全部楼层
本帖最后由 chzj589 于 2019-5-20 18:56 编辑
chzj589 发表于 2019-5-15 11:02
判断10行以上有BUG,需修改。

无聊,修改后可对9999行进行判断。



本帖子中包含更多资源

您需要 登录 才可以下载或查看,没有帐号?加入

x
您需要登录后才可以回帖 登录 | 加入

本版积分规则

QQ|小黑屋|手机版|AUTOIT CN ( 鲁ICP备19019924号-1 )谷歌 百度

GMT+8, 2019-5-27 10:35 , Processed in 0.078125 second(s), 16 queries .

Powered by Discuz! X3.4 Licensed

© 2001-2017 Comsenz Inc.

快速回复 返回顶部 返回列表