使用PERL读写EXCEL
perl文件读写

由于cat命令将显示输入文件的内容, 由于 命令将显示输入文件的内容,故 命令将显示输入文件的内容 该语句等价于open(MYPIPE, “>hello”); 用 该语句等价于 管道发送邮件如下: 管道发送邮件如下: open (MESSAGE, "| mail dave"); print MESSAGE ("Hi, Dave! Your Perl program sent this!\n"); close (MESSAGE);
Perl语言程序设计
文件读写
一、打开、关闭文件
1. 语法 为open (filevar, filename),其中filevar 为文件句柄,或者说是程序中用来代表某文 件的代号,filename为文件名,其路径可为 相对路径,亦可为绝对路径。 open(FILE1,"file1"); open(FILE1, "/u/jqpublic/file1"); open(FILE1, “\\u\\jqpublic\\file1");
亦可用逻辑或操作符表示如下: open (MYFILE, "file1") || die ("Could not open file");
当文件操作完毕后,用close(MYFILE); 关闭文件。
二、读文件
读取文件一行数据 语句$line = <MYFILE>;从文件中读取一 行数据存储到简单变量$line中并把文件指针 向后移动一行。<STDIN>为标准输入文件, 通常为键盘输入,不需要打开。
八、命令行参数
一样, 象C一样,PERL也有存储命令行参数的 一样 也有存储命令行参数的 数组@ARGV,可以用来分别处理各个命令 数组 , 行参数; 不同的是, 行参数;与C不同的是,$ARGV[0]是第一个 不同的是 是第一个 参数,而不是程序名本身。 参数,而不是程序名本身。 $var = $ARGV[0]; # 第一个参数 $numargs = @ARGV; # 参数的个数
openpyxl读写Excel多个单元格的数据的多种方法

openpyxl读写Excel多个单元格的数据的多种⽅法接上篇:from openpyxl import load_workbook # 可以对已存在的Excel⽂件进⾏读写操作# 使⽤load_workbook来实现Excel读写# 1.打开Excel⽂件(test_cases.xlsx已存在)wb = load_workbook("test_cases.xlsx")# 2.定位表单ws = wb['sheet1'] # ws为worksheet对象(相当如Excel中的⼀个表单)# 3.定位单元格# ⽅法⼀:处理指定的⼀个单元格one_cell = ws.cell(row=2,column=2) # one_cell相当于表单中的某个单元格print(one_cell.value)# ⽅法⼆:每遍历⼀次处理⼀个单元格# worksheet对象中有以下重要属性:for row_index in range(ws.min_row+1,ws.max_row+1): # max_row:单元格最⼤⾏;min_row:单元个准⼩⾏;for col_index in range(ws.min_column,ws.max_column+1): # max_column:单元个最⼤列;min_column:单元格最⼩列;data = ws.cell(row=row_index,column=col_index).valueprint("值为:{}\n类型为:{}\n".format(data,type(data)))# ⽅法三:# worksheet对象有如下重要⽅法# iter_rows:返回⼀个⽣成器,是由每⼀⾏数据构成的元组# iter_columns:返回⼀个⽣成器,是由每⼀列数据构成的元组for row_tuple in ws.iter_rows(min_row=2): # 每遍历⼀次,会将某⼀⾏的所有单元格对象(cell对象)组成⼀个元组返回# print(row_tuple)for one_cell in row_tuple:data = one_cell.valueprint("值为:{}\n类型为:{}\n".format(data, type(data)))# 或者:for row_tuple in ws.iter_rows(min_row=2,values_only=True): # 每遍历⼀次,会将某⼀⾏的所有单元格(cell对象)的值组成⼀个元组返回 for data in row_tuple:print("值为:{}\n类型为:{}\n".format(data, type(data)))# ⽅法四:指定需要处理的所有单元格sheets = ws["A2:G5"] # 返回嵌套元组的元组,内层元组是由每⼀⾏的每⼀个单元格cell对象组成的for row in sheets:for cl in row:data = cl.valueprint("值为:{}\n类型为:{}\n".format(data, type(data)))。
delphi7如何读取excel文件

delphi7如何读取excel文件我有一个excel文件,第一行是某项目预算表,第二行有分公司、项目名,第三行是材料、数量、单价、金额等列标题,往下就是具体的数据,请问我怎么读取哪些具体数据呀?我以前见过一个软件,可以在表格中打开excel文件,然后可以删除excel的前后几行,只留下规则的中间部分(实际的excel文件中这几行并没删除),不知道怎么可以实现这样的功能用ole可以解决用ole读excel:会读了后,你自己处理一下要读的数据就行了varI, J: Integer;MaxRow, MaxCol: Integer;List, Strs: TStringList;ExcelApp, Sheet: Variant;OldTime: TDateTime;beginList := TStringList.Create;Strs := TStringList.Create;// 创建一个excel的ole对象ExcelApp := CreateOleObject( "Excel.Application ");try// 打开一个excel文件ExcelApp.WorkBooks.Open(Edit1.Text);List.BeginUpdate;try// 设置工作区ExcelApp.WorkSheets[1].Activate;Sheet := ExcelApp.WorkSheets[1];// 有数据的区域的行数和列数MaxRow := edRange.Rows.count - 1;MaxCol := edRange.Columns.count;for I := 2 to MaxRow dobeginStrs.Clear;for J := 1 to MaxCol dobegin// 获得excel的数据第i行,第j列单元格内的数据Strs.Add(Sheet.Cells[i, j].Value);end;List.Add(maText);end;finally// 关闭工作区ExcelApp.WorkBooks.Close;List.EndUpdate;end;finally// 释放ole对象ExcelApp.Quit;List.Free;Strs.Free;end;end;用delphi提供的excelapplication读,在servers选项卡里varI, J: Integer;MaxRow, MaxCol: Integer;List, Strs: TStringList;sheet: ExcelWorksheet;OldTime: TDateTime;XlsCell: string;beginList := TStringList.Create;Strs := TStringList.Create;// 连接ExcelApplication1.Connect;tryExcelApplication1.Visible[1] := False;// 打开一个excel文件,文件名是edit.text ExcelApplication1.Workbooks.Open(Edit1.Text, EmptyParam, EmptyParam, EmptyParam, EmptyParam, EmptyParam, EmptyParam, EmptyParam, EmptyParam, EmptyParam, EmptyParam, EmptyParam, EmptyParam,EmptyParam, EmptyParam, 0);List.BeginUpdate;try//ExcelApplication1.WorkSheets[1].Activate;Sheet := ExcelApplication1.WorkSheets[1] as ExcelWorksheet; MaxRow := edRange[1].Rows.count - 1;MaxCol := edRange[1].Columns.count;for I := 2 to MaxRow dobeginStrs.Clear;for J := 1 to MaxCol dobeginXlsCell := ColRowNumToStr(J, I);Strs.Add(Sheet.Range[XlsCell, XlsCell].Text);end;List.Add(maText);end;finallyExcelApplication1.WorkBooks.Close(1);List.EndUpdate;end;finallyExcelApplication1.Disconnect;List.Free;Strs.Free;end;end;还有一些第三方的表格控件可以直接读取excel的数据的网上搜下,这方面东西太多了Delphi中使用ADO连接Excel有感By panther666今天在Delphi中使用ADO连接Excel(以前在一本书看过,复习一下-_-!!),有所收获,不敢独享。
VLISP调用EXCEL常用公共函数

;;;;;;;;此為經整理過后一些VLISP調用EXCEL常用公共函數;;;;;;;;;;;; ;;;;;;;;此為私人函數未經許可請勿............................... ;;;;;;;;開發:朱衛星 2005/02/22 rev01............................ ;;;;;;;;it's the first!ok!used in acad at least rev. 2000;;;;;;; (Defun vlxls-variant->list (VarX / Run Item Rtn)(setq Run T)(while Run(cond ((= (type VarX) 'SAFEARRAY)(setq VarX (vlax-safearray->list VarX)))((= (type VarX) 'VARIANT)(if (member (vlax-variant-type VarX) (list 5 4 3 2))(setq VarX (vlax-variant-change-type Varx vlax-vbString)))(setq VarX (vlax-variant-value VarX)))(t (setq Run nil))))(cond ((= (type VarX) 'LIST)(foreach Item VarX(setq Item (vlxls-variant->list Item) Rtn (append Rtn (list Item)) )))((= VarX nil) (setq Rtn ""))(t (setq Rtn VarX)))Rtn)(Defun vlxls-color-ECI->truecolor (Color / Rtn)(if (setq Rtn (cdr (assoc Color *xls-color*)))(setq Rtn (nth 1 Rtn)))(if (null Rtn)(setq Rtn 16711935))Rtn);;;EXAMPLE:;;;(vlxls-color-eci->truecolor 0)return: 16711935;;;(vlxls-color-eci->truecolor 1)return: 0;;;(vlxls-color-eci->truecolor 12)return: 8355584;;;(vlxls-color-eci->truecolor 120)return: 16711935(Defun vlxls-color-eci->aci (Color / Rtn)(if (null (setq Rtn (cdr (assoc Color *xls-color*))))(setq Rtn 256)(setq Rtn (nth 0 Rtn)))Rtn);;;EXAMPLE:;;;(vlxls-color-eci->aci 0)return: 256;;;(vlxls-color-eci->aci 1)return: 18;;;(vlxls-color-eci->aci 12)return: 56;;;(vlxls-color-eci->aci 120)return: 256(Defun vlxls-color-aci->eci (Color / Item Rtn)(foreach Item *xls-color*(if (= (nth 1 Item) Color)(setq Rtn (car Item))))(if (null Rtn)(setq Rtn 0))Rtn);;;Examples:;;;(vlxls-color-aci->eci 0)return: 0;;;(vlxls-color-aci->eci 1)return: 3;;;(vlxls-color-aci->eci 12)return: 0;;;(vlxls-color-aci->eci 120)return: 0(Defun vlxls-color-aci->truecolor (aci)(vlxls-color-eci->truecolor (vlxls-color-aci->eci aci)));;;Examples:;;;(vlxls-color-aci-> truecolor 0) return: 16711935;;;(vlxls-color-aci->truecolor 1) return: 16711680;;;(vlxls-color-aci-> truecolor 12)return: 16711935;;;(vlxls-color-aci-> truecolor 120)return: 16711935;;;OK!NOW LET'S GO! START EXCEL.APPLICATION!!............;;;before use these program you should install "Microsoft Excel" in your computer!! ;;;if not,you will recicieve an error messege!!;;;such as "warning:........."! ZWX 2005/02/22 COPYRIGHT .....(Defun vlxls-app-Init (/ OSVar GGG Olb8 Olb9 Olb10 TLB Out msg msg1 msg2) ;;;;;;;;;;該程序實現了初始化EXCEL應用程序!(if *Chinese*(setq msg "\n 初始化微軟Excel "msg1 "\042初始化Excel失敗\042"msg2 (strcat "\042 警告""\n ====""\n 無法在您的計算机上檢測到微軟Excel 軟件""\n 如果您确認已經安裝Excel, 請發送電子郵""\n 件到yota@獲取更多的解決方案\042"))(setq msg "\n Initializing Microsoft Excel "msg1 "\042Initialization Error\042"msg2 (strcat "\042 WARNING""\n =======""\n Can NOT detect Excel97/200X/XP in your computer" "\n If you already have Excel installed, please email""\n us to get more solution via yota@\042")))(if (null msxl-xl24HourClock)(progn (if (and (setq GGG (vl-registry-read"HKEY_LOCAL_MACHINE\\SOFTWARE\\Microsoft\\Windows\\CurrentVersion\\App Paths\\Excel.EXE""Path"))(setq GGG (strcase (strcat GGG "Excel.EXE"))))(progn (foreach OSVar (list "SYSTEMROOT" "WINDIR""WINBOOTDIR" "SYSTEMDRIVE" "USERNAME" "COMPUTERNAME" "HOMEDRIVE" "HOMEPATH" "PROGRAMFILES") (if (vl-string-search (strcat "%" OSVar "%") GGG)(setq GGG (vl-string-subst (strcase (getenv OSVar))(strcat "%" OSVar "%")GGG))))(setq Olb8 (findfile (vl-string-subst "EXCEL8.OLB" "EXCEL.EXE" GGG))Olb9 (findfile (vl-string-subst "EXCEL9.OLB" "EXCEL.EXE" GGG))Olb10 (findfile (vl-string-subst "EXCEL10.OLB" "EXCEL.EXE" GGG))) (cond ((= (vl-filename-base (vl-filename-directory GGG))"OFFICE11")(setq TLB GGG Out "2003"))((= (vl-filename-base (vl-filename-directory GGG))"OFFICE10")(setq TLB GGG Out "XP"))(Olb9 (setq TLB Olb9 Out "2000"))(Olb8 (setq TLB Olb8 Out "97"))(t (setq Out "Version Unknown")))(if TLB (progn (princ (strcat MSG Out "..."))(vlax-import-type-library:tlb-filename TLB:methods-prefix "msxl-":properties-prefix "msxl-":constants-prefix "msxl-"))))(progn (if vldcl-msgbox(vldcl-msgbox "x" msg1 msg2)(alert (read msg2)))(exit)))))msxl-xl24HourClock);;;Examples:;;;(vlxls-app-init) return: 33(Defun vlxls-app-New (UnHide / Rtn);;;; 該程序實現功能:新建一個excel格;;;;;;;;;; THIS PROGRAM CAN BUILD A NEW EXCELFILE(if (vlxls-app-init)(progn(if *Chinese* (princ "\n 新建微軟Excel工作表...")(princ "\n Creating new Excel Spreadsheet file...")) ion"))(progn (vlax-invoke-method(vlax-get-property Rtn 'WorkBooks)'Add)(if UnHide (vla-put-visible Rtn 1)(vla-put-visible Rtn 0))))))Rtn);;;Examples:;;;(setq *xlapp* (vlxls-app-new T)) return: #(Defun vlxls-app-open(XLSFile UnHide / ExcelApp WorkSheet Sheets ActiveSheet Rtn) ;;;function: this program can open an excelfile(setq XLSFile (strcase XLSFile))(if (null (wcmatch XLSFile "*.XLS"))(setq XLSFile (strcat XLSFile ".XLS")))(if (and (findfile XLSFile)(setq Rtn (vlax-get-or-create-object "Excel.Application")))(progn (vlax-invoke-method (vlax-get-property Rtn 'WorkBooks)'Open XLSFile)(if UnHide(vla-put-visible Rtn 1)(vla-put-visible Rtn 0))))Rtn);;;Examples:;;;(setq *xlapp* (vlxls-app-open “” T)) e #(Defun vlxls-app-save (xlapp);;;;保存文件(equal (vlax-invoke-method(vlax-get-property Xlapp "ActiveWorkbook")"Save"):vlax-true));;;Examples:;;;(vlxls-app-save *xlapp*) return: T(Defun vlxls-app-saveas (xlapp Filename / Rtn);;;另存文件(if (null filename)(setq filename (strcat (getvar "dwgprefix") "XLS.XLS")))(if (null (wcmatch (setq filename (strcase Filename)) "*.XLS")) (setq filename (strcat filename ".XLS")))(if (findfile Filename)(vl-file-delete (findfile Filename)))(vlax-invoke-method(vlax-get-property Xlapp "ActiveWorkbook")"SaveAs"Filenamemsxl-xlNormal"""":vlax-False:vlax-Falsenil)(findfile Filename));;;Examples:;;;(vlxls-app-saveas *xlapp* nil) return: “”;;;(vlxls-app-saveas *xlapp* “”) return: “”;;;(vlxls-app-saveas *xlapp* nil) return: NIL(Defun vlxls-app-quit (ExlObj SaveYN);;退出應用程序(if SaveYN(vlax-invoke-method(vlax-get-property ExlObj "ActiveWorkbook")'Close)(vlax-invoke-method(vlax-get-property ExlObj "ActiveWorkbook")'Close:vlax-False))(vlax-invoke-method ExlObj 'QUIT)(vlax-release-object ExlObj)(setq ExlObj nil)(gc));;;Examples:;;;(vlxls-app-quit *xlapp* nil) return: nil(Defun vlxls-app-kill (SaveYN / ExlObj);;;強行清除所有EXCEL應用程序(while (setq ExlObj (vlax-get-object "Excel.Application"))(vlxls-app-quit ExlObj SaveYN)));;;Examples:;;;(vlxls-app-kill T) return: nil(Defun vlxls-app-autofit (xlapp / sh act Rtn);;;存儲格自動調整大小(setq act (vlxls-Sheet-Get-Active xlapp))(foreach sh (append (vl-remove act (vlxls-sheet-get-all Xlapp))(list act))(setq Rtn (variant-value (msxl-autofit(msxl-get-columns(msxl-get-Cells(vlxls-sheet-get-usedrange xlapp sh)))))))(equal Rtn :vlax-true));;;Examples:;;;(vlxls-app-autofit *xlapp*) return: T;;;(vlxls-app-autofit *xlapp*) return: NIL(Defun vlxls-sheet-get-all (xlapp / SH Rtn);;;;取得所有應用的頁(vlax-for SH (vlax-get-property Xlapp "sheets")(setq Rtn (cons (vlax-get-property sh "Name") Rtn)))(reverse Rtn));;;Examples:;;;(vlxls-sheet-get-all *xlapp*) e ("Sheet1" "Sheet2" "Sheet3")(Defun vlxls-Sheet-Get-Active (xlapp);;;;返回當前應用的頁(vlax-get-property (msxl-get-ActiveSheet Xlapp) 'name));;;Examples:;;;(vlxls-sheet-get-active *xlapp*) return: "Sheet2"(Defun vlxls-sheet-delete (xlapp Name / sh Rtn);;;刪除頁(setq Rtn (vlxls-sheet-get-all Xlapp))(vlax-for sh (vlax-get-property Xlapp "sheets")(if (= (vlax-get-property sh "Name") Name)(vlax-invoke-method sh "Delete")))(not (equal Rtn (vlxls-sheet-get-all Xlapp))));;;Examples:;;;(vlxls-sheet-delete *xlapp* “Sheet1”) return: T;;;(vlxls-sheet-delete *xlapp* “UnExistingSheet”) return: NIL(Defun vlxls-sheet-rename (New Old Xlapp / sh Rtn);;;給頁重新命名(if (null old)(setq old (msxl-get-name (msxl-get-activesheet Xlapp))))(if (member New (vlxls-sheet-get-all Xlapp))(setq Rtn nil)(progn (vlax-for sh (vlax-get-property Xlapp "sheets")(if (= (msxl-get-name sh) Old)(msxl-put-name sh New)))(setq Rtn (equal New (vlax-get-property (msxl-get-ActiveSheet Xlapp) 'name)))))Rtn);;;Examples:;;;(vlxls-sheet-rename “New”“Sheet1” *xlapp*) return: T;;;(vlxls-sheet-rename “New” NIL *xlapp*) return: T;;;(vlxls-sheet-rename “Sheet3” NIL *xlapp*) return: NIL;;;(vlxls-sheet-rename “Sheet2”“Sheet1” *xlapp*) return: NIL;;;(vlxls-sheet-rename “Sheet2”“UnExistSheet” *xlapp*) return: NIL(Defun vlxls-sheet-add (xlapp Name / Rtn);;;增加頁(if (member name (vlxls-sheet-get-all xlapp))(setq Rtn nil)(progn (vlax-put-property(vlax-invoke-method(vlax-get-property Xlapp "sheets") "Add")"name" Name)(setq Rtn (equal (vlxls-sheet-get-active xlapp) name))))Rtn);;;Examples:;;;(vlxls-sheet-add *xlapp* “Sheet1”) return: T;;;(vlxls-sheet-add *xlapp* NIL) return: T;;;(vlxls-sheet-add *xlapp* “NewSheet”) return: NIL(Defun vlxls-sheet-put-active (xlapp Name / sh);;;設置當前使用頁(if (null (vlxls-sheet-add xlapp name))(vlax-for sh (vlax-get-property Xlapp "sheets")(if (= (vlax-get-property sh "Name") Name)(vlax-invoke-method sh "Activate"))))(equal (vlxls-sheet-get-active xlapp) name));;;Examples:;;;(vlxls-sheet-put-active *xlapp* “Sheet1”) return: T;;;(vlxls-sheet-put-active *xlapp* “NewSheet”) return: T(Defun vlxls-sheet-get-UsedRange (xlapp Name / sh Rtn);;;取得使用頁的使用范圍(if (null Name)(setq Name (vlax-get-property (msxl-get-ActiveSheet Xlapp) 'Name)))(vlax-for sh (vlax-get-property Xlapp "sheets")(if (= (vlax-get-property sh "Name") Name)(setq Rtn (vlax-get-property sh "UsedRange"))))Rtn);;;Examples:;;;(vlxls-sheet-get-usedrange *xlapp* “Sheet1”) return: T;;;(vlxls-sheet- get-usedrange *xlapp* “NewSheet”) return: T(Defun vlxls-cellid (id / xx id1 id2 Rtn) ;;;;cell id 轉換(if (= (type id) 'list)(setq id (vlxls-rangeid id)))(setq id (strcase id))(if (null (setq xx (vl-string-search ":" id)))(setq Rtn (list id ""))(setq id1 (substr id 1 xx)id2 (substr id (+ xx 2))id1 (vlxls-rangeid id1)id2 (vlxls-rangeid id2)Rtn (list (vlxls-rangeid (list (min (car id1) (car id2))(min (cadr id1) (cadr id2))))(vlxls-rangeid (list (max (car id1) (car id2))(max (cadr id1) (cadr id2)))))))Rtn);;;Examples:;;;(vlxls-cellid ‘(3 14)) return: ("C14" "");;;(vlxls-cellid “D23”) return: ("D23" "");;;(vlxls-cellid “C12:F3”) return: ("C3" "F12");;;(vlxls-cellid “F15:G22”) return: ("F15" "G22")(Defun vlxls-rangeid (id / str->list list->str xid->str Rtn) ;;;;range id 轉換(Defun str->list1 (str / ii xk xv rr pos x y)(setq rr (strlen str))(foreach ii '("0" "1" "2" "3" "4" "5" "6" "7" "8" "9")(if (setq pos (vl-string-search ii str))(setq rr (min pos rr))))(setq x (substr str 1 rr)y (substr str (1+ rr)))(if (= (strlen x) 2)(setq xk (- (ascii (substr x 1 1)) 64)xv (- (ascii (substr x 2)) 64))(setq xk 0xv (- (ascii x) 64)))(list (+ (* xk 26) xv) (read y)))(Defun xid->str (IntNum / PosNum Nm-One)(setq Nm-One (1- IntNum)PosNum (/ Nm-One 26))(if (= PosNum 0)(chr (+ 65 (rem Nm-One 26)))(strcat (chr (+ 64 PosNum)) (chr (+ 65 (rem Nm-One 26))))))(Defun list->str1 (idr / x y)(setq x (car idr)y (cadr idr)x (xid->str x)y (itoa y))(strcat x y))(cond ((= (type id) 'str) (setq Rtn (str->list1 id)))((= (type id) 'list) (setq Rtn (list->str1 id))))Rtn);;;Examples:;;;(vlxls-rangeid ‘(3 14)) return: "C14";;;(vlxls-rangeid “D23”) return: (4 23);;;(vlxls-rangeid “DD23”) return: (108 23)(Defun vlxls-range-autofit (range);;自動調整范圍內存儲格(equal (vlax-variant-value(msxl-autofit(msxl-get-columns (msxl-get-Cells range)))):vlax-true));;;Examples:;;;(vlxls-range-autofit (msxl-get-range *xlapp* “C12:F15”)) return: T ;;;(vlxls-range-autofit RangeObject) return: NIL(Defun vlxls-cell-put-active (xl id / Rtn);;范圍內激活(if (= (type id) 'list)(setq id (vlxls-rangeid id)))(msxl-activate (setq Rtn (msxl-get-range xl id)))Rtn);;;Examples:;;;(vlxls-cell-put-active *xlapp* “C12:F15”) return: #;;;(vlxls-cell-put-active *xlapp* “F12”) return: #(Defun vlxls-cell-get-value (xl id);;取得范圍內值并列表(if (= (type id) 'list)(setq id (vlxls-rangeid id)))(vlxls-variant->list(msxl-get-value2 (msxl-get-range xl id))));;;Examples:;;;(vlxls-cell-get-value *xlapp* “C12”) return: “g”;;;(vlxls-cell-get-value *xlapp* “C12:C12”) return: “g”;;;(vlxls-cell-get-value *xlapp* “C12:C15”) return: (("g") ("") ("") ("")) ;;;(vlxls-cell-get-value *xlapp* “C12:F12”) return: (("g" "ds" "" ""));;;(vlxls-cell-get-value *xlapp* “C12:F15”) return: (("g" "ds" "" "") ("" "" "g" "") ("" "" "" "") ("" "" "" ""))(Defun vlxls-cell-put-value (xl id Data / vllist-explode idx xx yy ary Rtn) ;;;;;將信息輸入區域內(Defun vllist-explode1 (lst)(cond ((not lst) nil)((atom lst) (list lst))((append (vllist-explode1 (car lst))(vllist-explode1 (cdr lst))))))(if (null id)(setq id "A1"))(if (= (type id) 'list)(setq id (vlxls-rangeid id)))(if (= (type (car Data)) 'LIST)(setq ARY (vlax-make-safearrayvlax-vbstring(cons 0 (1- (length Data)))(cons 1 (length (car Data))))XX (1- (length (car Data)))YY (1- (length Data)))(setq ARY (vlax-make-safearrayvlax-vbstring(cons 0 1)(cons 1 (length Data)))XX (1- (length Data))YY 0))(if (= xx yy 0)(msxl-put-value2(setq Rtn (msxl-get-range xl id))(car (vllist-explode1 data)))(progn(setq id (vlxls-cellid-calc id xx yy))(msxl-put-value2(setq Rtn (msxl-get-range xl id))(vlax-safearray-fill ary data))))Rtn);;;Examples:;;;(vlxls-cell-put-value *xlapp* “C12”“xx”) return: #;;;(vlxls-cell-put-value *xlapp* “C12:F3”“xx”) return: #;;;(vlxls-cell-put-value *xlapp* “C12:D13”‘((“zz”“xx”)(“xx”“zz”))) ereturn:(Defun vlxls-cellid-calc (id x y / idx) ;;;計算范圍(setq id (car (vlxls-cellid id))idx (vlxls-rangeid id)x (+ x (car idx))x (if (< x 1)1x)y (+ y (cadr idx))y (if (< y 1)1y)idx (vlxls-rangeid (list x y))id (vlxls-cellid (strcat id ":" idx))id (strcat (car id) ":" (cadr id)))id);;;Examples:;;;(vlxls-cellid-calc “C12” 2 20) return: "C12:E32";;;(vlxls-cellid-calc ‘(2 23) 2 -120) return: "B1:D23"(Defun vlxls-get-row-value (xl id len / vllist-explode Rtn);;取出單列的內容(Defun vllist-explode4 (lst)(cond ((not lst) nil)((atom lst) (list lst))((append (vllist-explode4 (car lst))(vllist-explode4 (cdr lst))))))(if (> len 0)(setq id (vlxls-cellid-calc id (1- len) 0))(setq id (vlxls-cellid-calc id (1+ len) 0)))(setq Rtn (vllist-explode4 (vlxls-cell-get-value xl id)))Rtn);;;Examples:;;;(vlxls-get-row-value *xlapp* “C12” 2) return: ("zz" "xxx");;;(vlxls-get-row-value *xlapp* “C12” -20) return: ("" "" "zz")(Defun vlxls-put-row-value (xl id data flg / Rtn);;;單列輸入信息并且flg為t則自動調整尺寸(if (= (type data) 'str)??? (setq data (list data))??? )(setq?? id (car (vlxls-cellid id))id (vlxls-cellid-calc id (1- (length data)) 0))(setq Rtn (vlxls-cell-put-value xl id (list data)))(if flag(vlxls-range-autofit??? rtn??? ))Rtn);;;Examples:;;;(vlxls-put-row-value *xlapp* “C12”“abc”) return:#;;;(vlxls-put-row-value *xlapp* ‘(12 3) “abc”) return:#;;;(vlxls-put-row-value *xlapp* “C12”‘("zz" "xxx")) return:#;;;(vlxls-put-row-value *xlapp* ‘(12 3) ‘("zz" "xxx")) return:#(Defun vlxls-get-column-value (xl id len / vllist-explode Rtn);;取出單欄信息(Defun vllist-explode3?????? (lst)??? (cond ((not lst) nil)((atom lst) (list lst))((append (vllist-explode3 (car lst))?? (vllist-explode3 (cdr lst))?? )?? ))??? )(setq id (car (vlxls-cellid id)))(if (> len 0)??? (setq id (vlxls-cellid-calc id 0 (1- len)))??? (setq id (vlxls-cellid-calc id 0 (1+ len)))??? )(setq Rtn (vllist-explode3 (vlxls-cell-get-value xl id)))Rtn);;;Examples:;;;(vlxls-get-column-value *xlapp* “C12” 2) return: ("zz" "sdfsdf");;;(vlxls-get-column-value *xlapp* “C12” -20) return: ("" "" "xxx" "xxx" "xxx" "xxx" "xxx" "xxx" "xxx" "xxx" "xxx" "zz")(Defun vlxls-put-column-value (xl id data flg / item Rtn);;;單欄輸入信息并且flg 為t則自動調整尺寸(if (= (type data) 'str)??? (setq data (list data))??? )(setq?? id (car (vlxls-cellid id))id (vlxls-cellid-calc id 0 (1- (length data))))(foreach item??? data?? (setq Rtn (cons (list item) Rtn)))(setq Rtn (vlxls-cell-put-value xl id (reverse Rtn)))(if flg?? (vlxls-range-autofit??? rtn?? ))Rtn);;;Examples:;;;(vlxls-put-column-value *xlapp* “C12”“abc”) return: #;;;(vlxls-put-column-value *xlapp* ‘(12 3) “abc”) return: #;;;(vlxls-put-column-value *xlapp* “C12”‘("zz" "xxx")) return: # ;;;(vlxls-put-column-value *xlapp* ‘(12 3) ‘("zz" "xxx")) return: #(Defun vlxls-cell-get-aci (xl id)(vlxls-color-eci->aci??? (vlax-variant-value????? (msxl-get-colorindex(msxl-get-interior (msxl-get-range xl id)))????? )??? ));;;Examples:;;;(vlxls-cell-get-aci *xlapp* “C12”) return:256;;;(vlxls-cell-get-aci *xlapp* ‘(12 3)) return:15(Defun vlxls-cell-put-aci (xl id aci / Rtn)(if (null aci)??? (msxl-put-colorindex????? (msxl-get-interior (setq Rtn (msxl-get-range xl id))) ????? (vlax-make-variant -4142)????? )??? (msxl-put-colorindex????? (msxl-get-interior (setq Rtn (msxl-get-range xl id))) ????? (vlxls-color-aci->eci aci)????? )??? )Rtn);;;Examples:;;;(vlxls-cell-put-aci *xlapp* “C12” 6) return: #;;;(vlxls-cell-put-aci *xlapp* “C12” nil) return: #(Defun vlxls-text-get-aci (xl id)(vlxls-color-eci->aci??? (vlax-variant-value????? (msxl-get-colorindex(msxl-get-font (msxl-get-range xl id)))????? )??? ));;;Examples:;;;(vlxls-text-get-aci *xlapp* “C12”) return: 256;;;(vlxls-text-get-aci *xlapp* ‘(12 3)) return: 15(Defun vlxls-text-put-aci (xl id aci / Rtn)?? (if (null aci)???? (msxl-put-colorindex?????? (msxl-get-font (setq Rtn (msxl-get-range xl id)))?????? (vlax-make-variant -4105)?????? )???? (msxl-put-colorindex?????? (msxl-get-font (setq Rtn (msxl-get-range xl id)))?????? (vlxls-color-aci->eci aci)?????? )???? )Rtn);;;Examples:;;;(vlxls-text-put-aci *xlapp* “C12” 6) return: #;;;(vlxls-text-put-aci *xlapp* “C12” nil) return: #(Defun vlxls-text-get-prop(xl id / Cell Font DXF1 DXF7 DXF40 DXF72 DXF62 DXF420 Rtn) ;;;;取得單元格文字相關信息(setq?? id???? (car (vlxls-cellid id))cell?? (msxl-get-range xl id)font?? (msxl-get-font cell)DXF7?? (vlax-variant-value (msxl-get-name Font))DXF40 (vlax-variant-value (msxl-get-size Font))DXF72 (vlax-variant-value (msxl-get-HorizontalAlignment Cell)?? )DXF72 (cond ((= DXF72 -4152) 11)?????? ((= DXF72 -4108) 10)?????? (t 9)?????? )DXF62 (vlxls-color-eci->aci?? (vlax-variant-value (msxl-get-colorIndex Font))?? )DXF420 (vlxls-color-eci->truecolor?? (vlax-variant-value (msxl-get-colorIndex Font)))Rtn??? (list (cons 0 (strcase id))?????? (cons 7 DXF7)(cons 40 DXF40)(cons 62 DXF62)?????? (cons 72 DXF72)(cons 420 DXF420))));;;Examples:;;;(vlxls-text-get-prop *xlapp* “C12”) return:((0 . "C12") (7 . "Arial") (40 .12.0) (62 . 256) (72 . 9) (420 . 16711935));;;(vlxls-text-get-prop *xlapp* ‘(2 10)) return:((0 . "B10") (7 . "Arial") (40 .12.0) (62 . 256) (72 . 11) (420 . 16711935))(Defun vlxls-cell-get-prop(xl id / range left top width height dxf10 Rtn) ;;;;取得單元格信息(if (vlxls-cell-merge-p xl id)???? (setq id (vlxls-cell-get-mergeid xl id))??? )(setq?? range (msxl-get-range xl id)left?? (vlax-variant-value (msxl-get-left Range))top??? (vlax-variant-value (msxl-get-top Range))width (vlax-variant-value (msxl-get-width Range))height (vlax-variant-value (msxl-get-height Range))dxf10 (list left top)Rtn??? (list (cons 0 (strcase id))?????? (cons 1 (vlxls-cell-get-value xl id))?????? (cons 10 dxf10)?????? (cons 41 width)?????? (cons 42 height)?????? (cons -1 (vlxls-text-get-prop xl id))?????? ))Rtn);;;Examples:;;;(vlxls-cell-get-prop *xlapp* “C12:F14”) return:((0 . "C12:F14") (1 ("zz" "xxx" "xxx" "xxx") ("sdfsdf" "sdfsdf" "sdfsdf" "sdfsdf");;;????????? ("sdfsdf" "sdfsdf" "sdfsdf" "sdfsdf")) (10 108.0 156.75) (41 . 156.0) (42 . 42.75) (-1 (0 . "C12") (7 . "Arial");;;????????? (40 . 12.0) (62 . 256) (72 . 9) (420 . 16711935)));;;(vlxls-cell-get-prop *xlapp* “B8”) return: ((0 . "B8") (1 . "sdg") (10 54.0 99.75) (41 . 54.0) (42 . 14.25) (-1 (0 . "B8");;;??? (7 . "Arial") (40 . 12.0) (62 . 256) (72 . 10) (420 . 16711935)))(Defun vlxls-cell-border (xl id flg / bdr);;;外框線(if flg??? (msxl-put-value????? (msxl-get-borders(msxl-get-range xl id)????? 1????? )??? (msxl-put-value????? (msxl-get-borders(msxl-get-range xl id))????? 'linestylemsxl-xlnone????? )??? ));;;Examples:;;;(vlxls-cell-border *xlapp* “C12:F14” T) return:NIL ;;;(vlxls-cell-border *xlapp* “B8” NIL) return:NIL(Defun vlxls-cell-merge????? (xl id / vllist-explode Val Rtn) ;;;;;;;;;合并單元格(Defun vllist-explode2?????? (lst)??? (cond ((not lst) nil)((atom lst) (list lst))((append (vllist-explode2 (car lst))?? (vllist-explode2 (cdr lst))?? )?? ))??? )(setq val (vllist-explode2 (vlxls-cell-get-value xl id))) (while (vl-position "" val)??? (setq val (vl-remove "" val))??? )(setq?? val (car val)Rtn (msxl-get-range xl id))(msxl-clear Rtn)(msxl-merge Rtn nil)(msxl-put-value2 Rtn Val)(msxl-put-HorizontalAlignment Rtn -4108)Rtn);;;Examples:;;;(vlxls-cell-merge *xlapp* “C12:F14”) return: #(Defun vlxls-cell-unmerge (xl id / Rtn);;;取消合并單元格(if (vlxls-cell-merge-p xl id)??? (progn????? (vlax-invoke-method (msxl-get-range xl id) 'unmerge) ????? (setq Rtn (msxl-get-range xl id))????? )??? )Rtn);;;Examples:;;;(vlxls-cell-unmerge *xlapp* “C12:F14”) return:#;;;(vlxls-cell-unmerge *xlapp* “E14”) return:#(Defun vlxls-cell-merge-p (xl id);;;判斷單元格是否合并(equal (vlax-variant-value?? (msxl-get-mergecells (msxl-get-range xl id))?? ):vlax-true));;;Examples:;;;(vlxls-cell-merge-p *xlapp* “C12:F14”) return:T;;;(vlxls-cell-merge-p *xlapp* “E14”) return:NIL(Defun vlxls-cell-get-mergeid (XL ID / Rtn);;;取得單元格合并的范圍(if (vlxls-cell-merge-p xl id)??? (progn????? (msxl-select (msxl-get-range xl id))????? (setq Rtn (vlxls-range-getid (msxl-get-selection xl))) ????? )??? )Rtn);;;Examples:;;;(vlxls-cell-get-mergeid *xlapp* “C12:F14”) return: "B9:G19”;;;(vlxls-cell-get-mergeid *xlapp* “E14”) return: "A11:G19(Defun vlxls-range-getID (range / col row dx dy);;;取得單元格地址(setq?? dx (vlxls-get-property range "MergeArea.Rows.Count")dy (vlxls-get-property range "MergeArea.Columns.Count")row (vlxls-get-property range "MergeArea.Row")col (vlxls-get-property range "MergeArea.Column"))(strcat (vlxls-rangeid (list col row))":"(vlxls-rangeid (list (1- (+ col dy)) (1- (+ row dx))))));;;Examples:;;;(vlxls-range-getid RangeObject) return: ”C12:G19”;;;(vlxls-range-getid RangeObject) return: ”B16:B16”(Defun vlxls-range-size????? (range / xl row col rrr ccc xxx yyy);;;;取得單元范圍尺寸(setq?? xl (msxl-get-parent range)Row (msxl-get-count (msxl-get-rows Range))Col (msxl-get-count (msxl-get-columns Range))RRR (1- (msxl-get-row Range))CCC (msxl-get-column Range))(repeat Row??? (setq yyy (cons?? (vlax-variant-value(msxl-get-height(msxl-get-range??? xl??? (vlxls-rangeid (list CCC (setq RRR (1+ RRR))))??? )))????? yyy????? ))??? )(setq?? RRR (msxl-get-row Range)CCC (1- (msxl-get-column Range)))(repeat Col??? (setq xxx (cons?? (vlax-variant-value(msxl-get-width(msxl-get-range??? xl??? (vlxls-rangeid (list (setq CCC (1+ CCC)) RRR))??? )))????? xxx????? ))??? )(list (reverse xxx) (reverse yyy)));;;Examples:5 14.25 57.0 14.25))(Defun vlxls-Rangevalue->SafeArray (Data / XSub_GetXY XSub_GetMinMaxID xsub-MergeID->List??? MinID MaxID ID ID1 ID2 IDN X minid xy Y Rtn Item) ;;;;;;;;;;;;;安全數組(Defun xsub-MergeID->List1 (ID / KK ID1 ID2 IDX IDY Rtn)??? (Setq ID (strcase ID))??? (if??? (setq KK (vl-string-search ":" ID))????? (setq ID1?? (substr ID 1 KK)??? ID2 (substr ID (+ 2 KK))??? )????? (setq ID1?? ID??? ID2 ID)????? )??? (setq ID1 (vlxls-rangeid ID1)ID2 (vlxls-rangeid ID2)IDX (vlxls-rangeid(list (min (nth 0 ID1) (nth 0 ID2))????? (min (nth 1 ID1) (nth 1 ID2))????? ))IDY?? (vlxls-rangeid???? (list (max (nth 0 ID1) (nth 0 ID2))?? (max (nth 1 ID1) (nth 1 ID2))?? )???? )Rtn (list IDX IDY))??? Rtn??? )(Defun XSub_GetXY1 (ID SID / S10 S11 DX DY Rtn)??? (setq S10 (nth 0 MinID)S11 (nth 1 MinID)ID (vlxls-rangeid ID)DX (- (nth 0 ID) S10)DY (- (nth 1 ID) S11)Rtn (list DX DY))??? Rtn??? )。
怎么在delphi中读取Excel数据(各种详细操作)

怎么在delphi中读取Excel数据(各种详细操作)转( 一) 使用动态创建的方法首先创建Excel 对象,使用ComObj :VarExcelApp : Variant ;ExcelApp := CreateOleObject ( '' Excel.Application '' ) ;1 ) 显示当前窗口:ExcelApp.Visible := True ;2 ) 更改Excel 标题栏:ExcelApp.Caption := '' 应用程序调用Microsoft Excel '' ;3 ) 添加新工作簿:ExcelApp.WorkBooks.Add ;4 ) 打开已存在的工作簿:ExcelApp.WorkBooks.Open ( '' C : \Excel\Demo.xls '' ) ;5 ) 设置第2个工作表为活动工作表:ExcelApp.WorkSheets [ 2 ] .Activate ;或ExcelApp.WorksSheets [ '' Sheet2 '' ] .Activate ;6 ) 给单元格赋值:ExcelApp.Cells [ 1 , 4 ] .Value := '' 第一行第四列'' ;7 ) 设置指定列的宽度(单位:字符个数),以第一列为例:ExcelApp.ActiveSheet.Columns [ 1 ] .ColumnsWidth := 5 ;8 ) 设置指定行的高度(单位:磅)(1磅=0.035 厘米),以第二行为例:ExcelApp.ActiveSheet.Rows [ 2 ] .RowHeight := 1 / 0.035 ; // 1厘米9 ) 在第8行之前插入分页符:ExcelApp.WorkSheets [ 1 ] .Rows [ 8 ] .PageBreak := 1 ;10 ) 在第8列之前删除分页符:ExcelApp.ActiveSheet.Columns [ 4 ] .PageBreak := 0 ;- 11 ) 指定边框线宽度:ExcelApp.ActiveSheet.Range [ '' B3 : D4 '' ] .Borders [ 2 ] .Weight := 3 ;1 - 左2 - 右3 - 顶4 - 底5 - 斜( \ )6 - 斜( / )12 ) 清除第一行第四列单元格公式:ExcelApp.ActiveSheet.Cells [ 1 , 4 ] .ClearContents ;13 ) 设置第一行字体属性:ExcelApp.ActiveSheet.Rows [ 1 ] := '' 隶书'' ;ExcelApp.ActiveSheet.Rows [ 1 ] .Font.Color := clBlue ;ExcelApp.ActiveSheet.Rows [ 1 ] .Font.Bold := True ;ExcelApp.ActiveSheet.Rows [ 1 ] .Font.UnderLine := True ;14 ) 进行页面设置:a.页眉:ExcelApp.ActiveSheet.PageSetup.CenterHeader := '' 报表演示'' ;b.页脚:ExcelApp.ActiveSheet.PageSetup.CenterFooter := '' 第&P页'' ;c.页眉到顶端边距2cm:ExcelApp.ActiveSheet.PageSetup.HeaderMargin := 2 / 0.035 ;d.页脚到底端边距3cm:ExcelApp.ActiveSheet.PageSetup.HeaderMargin := 3 / 0.035 ;e.顶边距2cm:ExcelApp.ActiveSheet.PageSetup.TopMargin := 2 / 0.035 ;f.底边距2cm:ExcelApp.ActiveSheet.PageSetup.BottomMargin := 2 / 0.035 ;g.左边距2cm:ExcelApp.ActiveSheet.PageSetup.LeftMargin := 2 / 0.035 ;h.右边距2cm:ExcelApp.ActiveSheet.PageSetup.RightMargin := 2 / 0.035 ;i.页面水平居中:ExcelApp.ActiveSheet.PageSetup.CenterHorizontally := 2 / 0.035 ;j.页面垂直居中:ExcelApp.ActiveSheet.PageSetup.CenterVertically := 2 / 0.035 ;k.打印单元格网线:ExcelApp.ActiveSheet.PageSetup.PrintGridLines := True ;15 ) 拷贝操作:a.拷贝整个工作表:ed.Range.Copy ;b.拷贝指定区域:ExcelApp.ActiveSheet.Range [ '' A1 : E2 '' ] .Copy ;- c.从A1位置开始粘贴:ExcelApp.ActiveSheet.Range. [ '' A1 '' ] .PasteSpecial ;d.从文件尾部开始粘贴:ExcelApp.ActiveSheet.Range.PasteSpecial ;16 ) 插入一行或一列:a.ExcelApp.ActiveSheet.Rows [ 2 ] .Insert ;b.ExcelApp.ActiveSheet.Columns [ 1 ] .Insert ;17 ) 删除一行或一列:a.ExcelApp.ActiveSheet.Rows [ 2 ] .Delete ;b.ExcelApp.ActiveSheet.Columns [ 1 ] .Delete ;18 ) 打印预览工作表:ExcelApp.ActiveSheet.PrintPreview ;19 ) 打印输出工作表:ExcelApp.ActiveSheet.PrintOut ;20 ) 工作表保存:If Not ExcelApp.ActiveWorkBook.Saved ThenExcelApp.ActiveSheet.PrintPreview ;21 ) 工作表另存为:ExcelApp.SaveAs ( '' C : \Excel\Demo1.xls '' ) ;22 ) 放弃存盘:ExcelApp.ActiveWorkBook.Saved := True ;23 ) 关闭工作簿:ExcelApp.WorkBooks.Close ;24 ) 退出Excel:ExcelApp.Quit ;( 二) 使用Delphi 控件方法在Form中分别放入ExcelApplication , ExcelWorkbook和ExcelWorksheet。
使用EPPlus读写excel文件并保存

使⽤EPPlus读写excel⽂件并保存之前在⽹上看到⼤部分的意见都认为“对于Excel 97-2003格式,还是⽤NPOI最好;⽽对于2007(xlsx)以上版本,可以使⽤EPPlus”。
然后在实际操作中有发现,使⽤NPOI的话,读取xlsx⽂件会出点问题,但是写⼊的话,个⼈感觉EPPlus语⾔简洁美观点(此地仅个⼈感官,实际使⽤以个⼈为主)关于excel读写,⽹上还找的别的:1. NPOI()2. MyXls()3. Koogra()4. ExcelLibrary()5. ExcelPackage()6. EPPlus()7. LinqToExcel()此地暂时仅介绍EPPlusEPPlus读取excel:using (ExcelPackage package = new ExcelPackage(new FileStream(path, FileMode.Open))){for (int i = 1; i <= package.Workbook.Worksheets.Count; ++i){ExcelWorksheet sheet = package.Workbook.Worksheets[i];for (int j = sheet.Dimension.Start.Column, k = sheet.Dimension.End.Column; j <= k; j++){for (int m = sheet.Dimension.Start.Row, n = sheet.Dimension.End.Row; m <= n; m++){string str = GetValue(sheet, m, j);if (str != null){// do something}}}}}EPPlus写⼊excel:using (ExcelPackage package = new ExcelPackage()){ExcelWorksheet sheet = package.Workbook.Worksheets.Add("Sheet1");sheet.Cells[1, 1].Value = "1";sheet.Cells[1, 2].Value = "2";sheet.Cells[1, 3].Value = "3";sheet.Cells[1, 4].Value = "4";sheet.Cells[1, 5].Value = "5";sheet.Cells[1, 6].Value = "6";using (Stream stream = new FileStream(path, FileMode.Create)){package.SaveAs(stream);}}合并单元格:worksheet.Cells[fromRow, fromCol, toRow, toCol].Merge = true;excel样式设置://表头样式(后⾯三个感觉没起作⽤)worksheet.Row(1).Height = 30; //设置⾼度worksheet.Row(1).Style.Font.Bold = true; //字体加粗worksheet.Row(1).Style.Font.Size = 11; //字体⼤⼩worksheet.Row(1) = "微软雅⿊"; //字体worksheet.Column(columnIndex).Width = 30; //设置列宽worksheet.DefaultRowHeight = 27;//设置单元格默认⾏⾼worksheet.Cells.Style.ShrinkToFit = true;//单元格⾃动适应⼤⼩worksheet.Cells.Style.WrapText = true;//⾃动换⾏worksheet.Cells.Style.Border.BorderAround(ExcelBorderStyle.Thin, Color.FromArgb(191, 191, 191));//设置单元格所有边框worksheet.Cells.Style.HorizontalAlignment = ExcelHorizontalAlignment.Center;//设置单元格⽔平居中worksheet.Cells.Style.VerticalAlignment = ExcelVerticalAlignment.Center;//设置单元格垂直居中//针对单⾏设置样式 Cells[row,col]worksheet.Cells[i, 1].Style.HorizontalAlignment = ExcelHorizontalAlignment.Left;//居左下⾯提供完整demo ///<summary>///导出供应商考核表///</summary>///<returns></returns>public IActionResult ExportSupplierAssessment(RaterType type){ResultResponse<string> result = new ResultResponse<string>();string webRootPath = _hostingEnvironment.WebRootPath;//考核表⽂件夹string folder_download = ConfigurationHelper.GetSingleNode("Download_Assessment");//虚拟⽬录string appUrl = ConfigurationHelper.GetSingleNode("File_AppUrl");try{//⽣成考核表⽂件夹var folderPath_download = bine(webRootPath, folder_download);if (!System.IO.Directory.Exists(folderPath_download)){System.IO.Directory.CreateDirectory(folderPath_download);}string fileName_download = $"供应商考核{EnumExtension.GetDescription(type)}打分表" + DateTime.UtcNow.AddHours(8).ToString("yyyyMMddHHmmss") + ".xls"; FileInfo file = new FileInfo(bine(webRootPath, folder_download, fileName_download));using (ExcelPackage package = new ExcelPackage(file)){// 添加worksheetExcelWorksheet worksheet = package.Workbook.Worksheets.Add("供应商考核表");var columnWidth = 10;//添加头worksheet.Cells[1, 1].Value = "类别";worksheet.Cells[1, 2].Value = "供应商类别";worksheet.Cells[1, 3].Value = "供应商名称";//worksheet.Cells[1, 3].Value = "平均得分";worksheet.Cells[1, 4].Value = "序号";worksheet.Cells[1, 5].Value = "项⽬名称";var endCells = 10;//学校评分if (type == RaterType.School){worksheet.Cells[1, 6].Value = "书⾯考核所占⽐例";worksheet.Cells[1, 7].Value = "书⾯考核分";worksheet.Cells[1, 8].Value = "学校考核所占⽐例";worksheet.Cells[1, 9].Value = "学校评分";worksheet.Cells[1, 10].Value = "备注";}//监理评分else if (type == RaterType.Supervisor){worksheet.Cells[1, 6].Value = "监理考核所占⽐例";worksheet.Cells[1, 7].Value = "监理评分";worksheet.Cells[1, 8].Value = "备注";endCells = 8;}else{worksheet.Cells[1, 6].Value = "校产站考核所占⽐例";worksheet.Cells[1, 7].Value = "计划部评分";worksheet.Cells[1, 8].Value = "施⼯部评分";worksheet.Cells[1, 9].Value = "设备部评分";worksheet.Cells[1, 10].Value = "备注";}//表头样式(后⾯三个貌似不起作⽤)//worksheet.Row(1).Height = 30; //设置⾼度//worksheet.Row(1).Style.Font.Bold = true; //字体加粗//worksheet.Row(1).Style.Font.Size = 11; //字体⼤⼩//worksheet.Row(1) = "微软雅⿊"; //字体//设置列宽for (int i = 1; i < 11; i++){worksheet.Column(i).Width = i == 3 || i == 5 ? 30 : columnWidth;}worksheet.DefaultRowHeight = 27;//设置单元格默认⾏⾼worksheet.Cells.Style.ShrinkToFit = true;//单元格⾃动适应⼤⼩worksheet.Cells.Style.WrapText = true;//⾃动换⾏worksheet.Cells.Style.Border.BorderAround(ExcelBorderStyle.Thin, Color.FromArgb(191, 191, 191));//设置单元格所有边框worksheet.Cells.Style.HorizontalAlignment = ExcelHorizontalAlignment.Center;//设置单元格⽔平居中worksheet.Cells.Style.VerticalAlignment = ExcelVerticalAlignment.Center;//设置单元格垂直居中//从第⼀⾏之后开始写var row = 1;//添加值var supplierScoreList = _supplierScoreAppService.GetSupplierScoreListByWait().Data;if (supplierScoreList != null){foreach (var score in supplierScoreList){var assessmentList = _supplierAssessmentAppService.GetSupplierAssessmentListBySupplierScoreUid(score.Uid).Data;if (assessmentList != null){var index = 0; //项⽬序号foreach (var assessment in assessmentList){index++;row++;worksheet.Row(row).CustomHeight = true;//⾃动调整⾏⾼//公共部分worksheet.Cells[$"A{row}"].Value = EnumExtension.GetDescription(score.SupplierType);worksheet.Cells[$"B{row}"].Value = score.SupplierCategoryName;worksheet.Cells[$"C{row}"].Value = score.SupplierName;worksheet.Cells[$"D{row}"].Value = index;worksheet.Cells[$"E{row}"].Value = assessment.ProjectName;switch (type){case RaterType.School:worksheet.Cells[$"F{row}"].Value = assessment.WrittenRatio;worksheet.Cells[$"G{row}"].Value = assessment.WrittenScore;worksheet.Cells[$"H{row}"].Value = assessment.SchoolRatio;worksheet.Cells[$"I{row}"].Value = assessment.SchoolScore;worksheet.Cells[$"G{row}"].Value = assessment.Remark;break;case RaterType.Supervisor:worksheet.Cells[$"F{row}"].Value = assessment.SupervisorRatio;worksheet.Cells[$"G{row}"].Value = assessment.SupervisorScore;worksheet.Cells[$"H{row}"].Value = assessment.Remark;break;case RaterType.Inside:worksheet.Cells[$"F{row}"].Value = assessment.InsideRatio;worksheet.Cells[$"G{row}"].Value = assessment.PlanScore;worksheet.Cells[$"H{row}"].Value = assessment.ConstructionScore;worksheet.Cells[$"I{row}"].Value = assessment.EquipmentScore;worksheet.Cells[$"G{row}"].Value = assessment.Remark;break;default:break;}}if (assessmentList.Count > 1){//合并单元格var startRow = row - assessmentList.Count() + 1;worksheet.Cells[startRow, 1, row, 1].Merge = true; //类型worksheet.Cells[startRow, 2, row, 2].Merge = true; //供应商类别worksheet.Cells[startRow, 3, row, 3].Merge = true; //供应商名称}}}}package.Save();}//写⼊⽂件File(fileName_download, "application/vnd.openxmlformats-officedocument.spreadsheetml.sheet", true);//前台访问路径var filePath = $"{Request.Host}/" + appUrl + $"/{folder_download}/{fileName_download}";result.Data = filePath;}catch (Exception ex){(ex.Message, ex);}return Ok(result);}。
delphi excel 例程
delphi excel 例程Delphi Excel 例程:一步一步回答在Delphi中,我们可以使用Excel 例程来实现与Excel文件的交互。
Excel 例程是一组可以通过Delphi编程语言来操作Excel文件的方法和函数。
本文将介绍如何使用Delphi和Excel 例程来创建、读取、写入和操作Excel 文件。
第一步:安装Excel 例程要开始使用Delphi和Excel 例程,我们首先需要安装Excel 例程库。
这可以通过三种方法之一来实现:1. 使用ActiveX组件:在Delphi IDE的“Component”菜单下,选择“Import ActiveX Control”。
在弹出的窗口中,选择“Microsoft Excel xx.x Object Library”(其中"xx.x"表示Excel版本号),然后点击“Install”按钮进行安装。
2. 使用第三方库:你还可以使用第三方库,如TExcelComponent或Flexcel,它们提供了更多的功能和灵活性。
3. 编写自己的Excel 例程:如果你对编程充满信心,你可以自己编写一组Excel 例程,以与Excel文件交互。
不过,这需要一些时间和努力。
第二步:创建一个新的Excel文件在使用Delphi和Excel 例程之前,我们首先需要创建一个Excel文件。
下面是示例代码,展示了如何使用Excel 例程来创建和保存一个新的Excel文件:delphivarExcelApp: Variant;ExcelWorkbook: Variant;ExcelWorksheet: Variant;begin创建Excel应用程序对象ExcelApp := CreateOleObject('Excel.Application');创建一个新的工作簿ExcelWorkbook := ExcelApp.Workbooks.Add;获取第一个工作表ExcelWorksheet := ExcelWorkbook.Worksheets.Item[1];设置单元格的值ExcelWorksheet.Cells[1, 1].Value := 'Hello'; ExcelWorksheet.Cells[1, 2].Value := 'World!';保存工作簿ExcelWorkbook.SaveAs('C:\NewExcelFile.xlsx');关闭Excel应用程序ExcelApp.Quit;end;通过这段代码,我们可以创建一个新的Excel应用程序对象,并在其中创建一个新的工作簿。
Spreadsheet::ParseExcel
Spreadsheet::ParseExcel}}/s/blog_5dd05f600100by4t.html--这里所有的perl技术问题都是我平常处理数据的时候要用到的,可能不是很强的程序,但是希望能和热爱perl的同志,一起分享...对于xls,csv的文件处理,可以用到的模块有太多,今天学习和总结了下,下面就介绍几种比较常用的:一.关于 Spreadsheet::Read 模块的用法,可以读取xls,csv和sxc 等格式的文件,方法如下#!/usr/bin/perluse Spreadsheet::Read;my $file = 'd:/Book1.xls'; #需要处理的文件my $spreadsheet = ReadData ($file) or die "$!";my $sheet_count = $spreadsheet->[0]{sheets} or die "No sheets in $file\n"; #记录有几个sheetfor my $sheet_index (1 .. $sheet_count){$sheet = $spreadsheet->[$sheet_index] or next;printf("%s - %2d: [%-s] %3d Cols, %5d Rows\n",$file,$sheet_index,$sheet->{label},$sheet->{maxcol},$sheet->{maxrow});for my $row (1 .. $sheet->{maxrow}) {print join "\t" => map {$sheet->{cell}[$_][$row] // "-" } 1 .. $sheet->{maxcol};print "\n"};1.这个程序是将数据以行的形式进行的读取,这样也使得文件可以轻松转换成txt文件2.其中有行的程序为:print join "\t" => map {$sheet->{cell}[$_][$row] // "-" } 1 .. $sheet->{maxcol};// 表示为 defined-or,是使用了perl 6的方法,即如果在取值的地方取到空值,几没有取到值,则用 - 标识这个地方.这个代码块也能换成print join "\t" => map {my $data = $sheet->{cell}[$_][$row] defined $data ? $data : "-";}1 .. $sheet->{maxcol};二.关于 Spreadsheet::ParseExcel的用法#!/usr/bin/perluse strict;use Spreadsheet::ParseExcel;use Spreadsheet::ParseExcel::Workbook;my $excel = Spreadsheet::ParseExcel::Workbook->Parse("d:/Book1.xls" );foreach my $sheet (@{$excel->{Worksheet}}) {printf ("Sheet: %s\n", $sheet->{Name});$sheet->{MaxRow} ||= $sheet->{MinRow};foreach my $row ($sheet->{MinRow} .. $sheet->{MaxRow}) { $sheet->{MaxCol} ||= $sheet->{MinCol};foreach my $col ($sheet->{MinCol} .. $sheet->{MaxCol}) {my $cell = $sheet->{Cells}[$row][$col];if ($cell) {printf("( %s , %s ) => %s\n", $row, $col, $cell->{Val});}}}}1.以hash结构的方式读出数据总结:还有很多方法,但是本人觉得还是第一个Spreadsheet::Read模块的用法最实用,至于原因吧2个数据的结果拿出来后就可以看出来了。
r读取表格的基本操作
在R中,可以使用多种方法读取表格数据。
以下是一些基本操作:1. 使用read.table()函数读取表格数据。
该函数可以读取以逗号、制表符或空格分隔的文本文件,并将其转换为数据框。
例如:```rdata <- read.table("data.txt", sep=",")```其中,"data.txt"是包含表格数据的文本文件名,sep参数指定了字段之间的分隔符。
2. 使用read.csv()函数读取CSV格式的表格数据。
该函数可以读取以逗号分隔的文本文件,并将其转换为数据框。
例如:```rdata <- read.csv("data.csv")```其中,"data.csv"是包含表格数据的CSV文件名。
3. 使用read_excel()函数读取Excel格式的表格数据。
该函数可以读取Excel文件中的数据,并将其转换为数据框。
例如:```rlibrary(readxl)data <- read_excel("data.xlsx")```其中,"data.xlsx"是包含表格数据的Excel文件名。
需要先安装并加载readxl包才能使用该函数。
4. 使用read_fwf()函数读取固定宽度格式的表格数据。
该函数可以读取以空格分隔的文本文件,并将其转换为数据框。
例如:```rdata <- read_fwf("data.txt", widths=c(5, 10, 12))```其中,"data.txt"是包含表格数据的文本文件名,widths参数指定了每个字段的宽度。
readexcel函数实例
readexcel函数实例readexcel函数实例是一种在Python中用于读取Excel文件内容的函数。
使用readexcel函数,可以方便地读取Excel文件中的数据并进行数据处理和分析。
以下是readexcel函数实例的一些具体用法和示例:1. 读取Excel文件中的单元格数据使用readexcel函数可以读取Excel文件中的单元格数据。
例如,如果需要读取Excel文件中A1单元格的数据可以使用以下代码:import pandas as pddf = pd.read_excel('example.xlsx', sheet_name='Sheet1', usecols='A1')print(df)此代码中,我们使用pandas库中的read_excel函数读取名为example.xlsx的Excel文件中的Sheet1表单中的A1单元格。
usecols 参数用于指定读取哪些列的数据。
2. 读取Excel文件中的整个表单数据使用readexcel函数可以读取Excel文件中的整个表单数据。
例如,如果需要读取Excel文件中Sheet1表单的所有数据可以使用以下代码:import pandas as pddf = pd.read_excel('example.xlsx', sheet_name='Sheet1') print(df)此代码中,我们使用pandas库中的read_excel函数读取名为example.xlsx的Excel文件中的Sheet1表单的所有数据。
3. 读取Excel文件中的多个表单数据使用readexcel函数可以读取Excel文件中的多个表单数据。
例如,如果需要读取Excel文件中Sheet1和Sheet2表单的所有数据可以使用以下代码:import pandas as pdsheets = ['Sheet1', 'Sheet2']dfs = []for sheet in sheets:dfs.append(pd.read_excel('example.xlsx',sheet_name=sheet))print(dfs)此代码中,我们使用pandas库中的read_excel函数分别读取名为example.xlsx的Excel文件中的Sheet1和Sheet2表单的所有数据,并将读取的数据存储在dfs列表中。
- 1、下载文档前请自行甄别文档内容的完整性,平台不提供额外的编辑、内容补充、找答案等附加服务。
- 2、"仅部分预览"的文档,不可在线预览部分如存在完整性等问题,可反馈申请退款(可完整预览的文档不适用该条件!)。
- 3、如文档侵犯您的权益,请联系客服反馈,我们会尽快为您处理(人工客服工作时间:9:00-18:30)。
用Perl读写Excel文件
最近写一个小脚本,读取Excel文件中的内容,经过处理后,生成新格式的Excel文件,将一些用法着一个小小的总结。
读取Excel文件中的内容,模块Spreadsheet::ParseExcel的一些常见用法
得到一个workbook对象:
my$excel=new Spreadsheet::ParseExcel;
my$fmt=Spreadsheet::ParseExcel::FmtUnicode->new(Unicode_Map=>"cp936");
my$workbook=$excel->Parse($file,$fmt);
得到excel文件中的表格数目:
$sheet_nums=$workbook->worksheet_count();
得到一个表格对象(这里的$sheet_num是表格的索引,从0开始计数):
$sheet=$workbook->worksheet($sheet_num);
获取表名:
my$sheetname=$sheet->get_name();
转换编码
$sheetname=decode('utf-8',$sheetname);
得到最大、最小行序(不是很准)
my($row_min,$row_max)=$sheet->row_range();
取单元格的值,在取之前最好能判断一下:
if($sheet->get_cell($row_num,$col_num)){
my$code=$sheet->{Cells}[$row_num][$col_num]->Value();
}
生成Excel文件,模块Spreadsheet::WriteExcel的一些常见用法
定义一个workbook对象
my$workbook=Spreadsheet::WriteExcel->new($filename);
定制一种格式
my$fmt4=$workbook->add_format(
border=>1,
bold=>1,
color=>'black',
size=>11,);
border样式为1,具体的样式可以从方档中查询
bold加粗
color字体颜色
size字体的大小
也可以这样设置格式:
my$fmt_OK=$workbook->add_format();
$fmt_OK->set_bg_color('green');
$fmt_OK->set_border_color('black');
$fmt_OK->set_border(1);
添加一个表格,注意中文表名,要设置编码,gbk或utf-8,自己试一试,我也搞不明白:
$sheetname=decode('gbk',$sheetname);
my$sheet=$workbook->add_worksheet($sheetname);
在某个单元格中填写数据(注意,对于写过的表格,不要再使用write,这样生成的excel文件打开时会报错),给定行、列、内容、格式,其中格式可能省略:
$sheet->write($row,1,$records[0],$fmt);
设置列宽,第3列至第34列列宽为2,(这里的参数是列的索引,索引是从0开始的):
$sheet->set_column(2,33,2);
设置行高($row为行索引):
$sheet->set_row($row,13.5);
关于合并单元格的内容,(参数分别为左上角行序、左上角列序、右下角的行序、右下角列序、内容、格式)再次提醒,不要在同一个格中重复写文,不然生成的excel表格打开时报错:
$sheet->merge_range($row,0,$row+1,1,decode('utf-8',"日期"),$fmt);
如果有其他们需求可以在模块的文档中搜索"merge",文档中有示例。