顯示具有 Excel 標籤的文章。 顯示所有文章
顯示具有 Excel 標籤的文章。 顯示所有文章

2022年12月6日 星期二

How to Generate Code 128 Barcode Font for Excel (With Easy Steps)

 

轉貼/作法參考: https://www.exceldemy.com/code-128-barcode-font-for-excel/


STEP 1: Download Code 128 Font

  • First of all, you need to download Code 128 You can download the font from this link.
  • After that, extract the downloaded folder to the C:\Windows\Fonts folder.
  • Otherwise, unzip the downloaded folder, copy the Code 128 font and paste it to the C:\Windows\Fonts folder.
  • Also, select Continue if the administrator permissions window appears.
下載Code 128條碼字型,必須搭配Code128編碼後的文字使用。

STEP 2: Apply VBA Code

在Excel文件裡建立資料編碼的模組函式。

網頁中內文附的VBA程式碼貼過來使用,會發現之後產生出來的條碼刷不出來。後來發現是Unicode的關係,造成編碼內容錯誤。
VBA程式碼中
Chr() 要修正成 ChrW()
Asc() 要修正成 AscW()

修正後內容如下

Option Explicit
Public Function Code128(SourceString As String)
    Dim Counter As Integer
    Dim CheckSum As Long
    Dim mini As Integer
    Dim dummy As Integer
    Dim UseTableB As Boolean
    Dim Code128_Barcode As String
    If Len(SourceString) > 0 Then
        For Counter = 1 To Len(SourceString)
            Select Case AscW(Mid(SourceString, Counter, 1))
                Case 32 To 126, 203
                Case Else
                    MsgBox "Invalid character in barcode string" & vbCrLf & vbCrLf & "Please only use standard ASCII characters", vbCritical
                    Code128 = ""
                    Exit Function
            End Select
        Next
        Code128_Barcode = ""
        UseTableB = True
        Counter = 1
        Do While Counter <= Len(SourceString)
            If UseTableB Then
                mini = IIf(Counter = 1 Or Counter + 3 = Len(SourceString), 4, 6)
                GoSub testnum
                If mini% < 0 Then
                    If Counter = 1 Then
                        Code128_Barcode = ChrW(205)
                    Else
                        Code128_Barcode = Code128_Barcode & ChrW(199)
                    End If
                    UseTableB = False
                Else
                    If Counter = 1 Then Code128_Barcode = ChrW(204)
                End If
            End If
            If Not UseTableB Then
                mini% = 2
                GoSub testnum
                If mini% < 0 Then
                    dummy% = Val(Mid(SourceString, Counter, 2))
                    dummy% = IIf(dummy% < 95, dummy% + 32, dummy% + 100)
                    Code128_Barcode = Code128_Barcode & ChrW(dummy%)
                    Counter = Counter + 2
                Else
                    Code128_Barcode = Code128_Barcode & ChrW(200)
                    UseTableB = True
                End If
            End If
            If UseTableB Then
                Code128_Barcode = Code128_Barcode & Mid(SourceString, Counter, 1)
                Counter = Counter + 1
            End If
        Loop
        For Counter = 1 To Len(Code128_Barcode)
            dummy% = AscW(Mid(Code128_Barcode, Counter, 1))
            dummy% = IIf(dummy% < 127, dummy% - 32, dummy% - 100)
            If Counter = 1 Then CheckSum& = dummy%
            CheckSum& = (CheckSum& + (Counter - 1) * dummy%) Mod 103
        Next
        CheckSum& = IIf(CheckSum& < 95, CheckSum& + 32, CheckSum& + 100)
        Code128_Barcode = Code128_Barcode & ChrW(CheckSum&) & ChrW$(206)
    End If
    Code128 = Code128_Barcode
    Exit Function
testnum:
        mini% = mini% - 1
        If Counter + mini% <= Len(SourceString) Then
            Do While mini% >= 0
                If AscW(Mid(SourceString, Counter + mini%, 1)) < 48 Or AscW(Mid(SourceString, Counter + mini%, 1)) > 57 Then Exit Do
            mini% = mini% - 1
            Loop
        End If
        Return
End Function

 

STEP 3: Use Code 128 Function

建立模組函式後,就可以在儲存格中使用。
Ex:
  =Code128("ABCDEFG")
  =Code128(A1)
使用函式後會得到Code128編碼後的字串

STEP 4: Change Font Theme and Size

針對Code128編碼後的文字更換為Code 128的字型(STEP 1下載安裝的字型)。
在字型下拉選項中可能找不到,可以手動輸入 Code 128 字型就會被套用。


進行到這個步驟Code 128條碼的部份就可以正確顯示出來了。

2022年8月2日 星期二

Excel Class Workbook 的 SaveAs 方法失敗

 



操作遠端連線在Terminal主機使用相同的程式,部份使用者在操作Excel匯出時會出現「Class Workbook 的 SaveAs 方法失敗」,需要將使用者的UserProfile刪除,重新登入後讓系統重建就可以正常匯出。

2022年4月12日 星期二

Excel 操作出現 "外部資料表不是預期的格式"

 




用程式操作開啟Excel文件,出現 "外部資料表不是預期的格式" 


或是用Excel開啟文件,出現檔案格式不相符的訊息



存檔時將文件格式指定為 "一般活頁簿",可以排除這類的狀況。

excel := CreateOleObject('Excel.Application');
excel.Visible := False;
excel.Workbooks.Add;
workbook := excel.Workbooks[1];
...
...
workbook.SaveAs(OleVariat(filename), -4143);



XlFileFormat 列舉 (Excel)

會指定儲存工作表時的檔案格式。

名稱描述副檔名
xlAddIn18Microsoft Excel 97-2003 增益集*.xla
xlAddIn818Microsoft Excel 97-2003 增益集*.xla
xlCSV6CSV*.csv
xlCSVMac22Macintosh CSV*.csv
xlCSVMSDOS24MSDOS CSV*.csv
xlCSVUTF862UTF8 CSV*.csv
xlCSVWindowsWindows CSV*.csv
xlCurrentPlatformText-4158目前平台文字*.txt
xlDBF27Dbase 2 格式*.dbf
xlDBF38Dbase 3 格式*.dbf
xlDBF411Dbase 4 格式*.dbf
xlDIF9資料交換格式*.dif
xlExcel1250Excel 二進位活頁簿*.xlsb
xlExcel216Excel 2.0 版 (1987)*.xls
xlExcel2FarEast7Excel 2.0 遠東版 (1987)*.xls
xlExcel329Excel 3.0 版 (1990)*.xls
xlExcel433Excel 4.0 版 (1992)*.xls
xlExcel4Workbook35Excel 4.0 版 活頁簿格式 (1992)*.xlw
xlExcel539Excel 5.0 版 (1994)*.xls
xlExcel739Excel 95 (7.0 版)*.xls
xlExcel856Excel 97-2003 活頁簿*.xls
xlExcel979543Excel 95 與 97 版*.xls
xlHtml44HTML 格式.htm;.html
xlIntlAddIn得到國際增益集沒有副檔名
xlIntlMacro0.25國際巨集沒有副檔名
xlOpenDocumentSpreadsheet60OpenDocument 試算表*.ods
xlOpenXMLAddIn55開啟 XML 增益集*.xlam
xlOpenXMLStrictWorkbook61 (&H3D)Strict Open XML 檔案*.xlsx
xlOpenXMLTemplate54開啟 XML 範本*.xltx
xlOpenXMLTemplateMacroEnabled53開啟 Open XML 範本巨集啟用*.xltm
xlOpenXMLWorkbook51開啟 XML 活頁簿*.xlsx
xlOpenXMLWorkbookMacroEnabled52開啟 XML 活頁簿巨集啟用*.xlsm
xlSYLK符號連結格式*.slk
xlTemplate17Excel 範本格式*.xlt
xlTemplate817範本 8*.xlt
xlTextMac19Macintosh 文字*.txt
xlTextMSDOS21MSDOS 文字*.txt
xlTextPrinter36印表機文字*.prn
xlTextWindowsWindows 文字*.txt
xlUnicodeText42Unicode 文字沒有副檔名;*.txt
xlWebArchive45Web 封存.mht;.mhtml
xlWJ2WD114日文 1-2-3*.wj2
xlWJ340日文 1-2-3*.wj3
xlWJ3FJ341日文 1-2-3 格式*.wj3
xlWK15Lotus 1-2-3 格式*.wk1
xlWK1ALLLotus 1-2-3 格式*.wk1
xlWK1FMT大約Lotus 1-2-3 格式*.wk1
xlWK315Lotus 1-2-3 格式*.wk3
xlWK3FM332Lotus 1-2-3 格式*.wk3
xlWK438Lotus 1-2-3 格式*.wk4
xlWKS4Lotus 1-2-3 格式*.wks
xlWorkbookDefault51預設活頁簿*.xlsx
xlWorkbookNormal-4143一般活頁簿*.xls
xlWorks2FarEastMicrosoft Works 2.0 遠東格式*.wks
xlWQ134Quattro Pro 格式*.wq1
xlXMLSpreadsheet46XML 試算表*.xml


2021年5月3日 星期一

Excel Sheet Save as HTML File

 var XLApp, Sheet, Data, vWorkBook: OleVariant;
  vProcedureData:OleVariant;
  i, iTitleLine, iSheetIndex, iRowCount, iColCount:Integer;
  sSampleFile, sFileAlias, sFileName, sBeginCell, sEndCell, sFormulaBeginCell, sFormulaEndCell:String;
  sRange, sSheetName:String;
begin
  Result := '';
  vProcedureData := UnitLib.fn_Get_Data_Array_From_Attach_Procedure;
  iTitleLine := DM1.adoAutoMail.FieldByName('TitleLine').AsInteger;
  sSampleFile := DM1.adoAutoMail.FieldByName('SampleFile').AsString;
  sFileAlias := UnitLib.fn_Get_AutoMail_FieldValue('FileAlias');
  iSheetIndex := DM1.adoAutoMail.FieldByName('SheetIndex').AsInteger;
  //
  XLApp := CreateOleObject('Excel.Application');
  try
    XLApp.Visible := False;
    XLApp.DisplayAlerts := False; //關掉警告訊息
    XLApp.WorkBooks.Open(sSampleFile);
    vWorkBook := XLApp.Workbooks[1];
    Sheet := vWorkBook.Worksheets[iSheetIndex];
    //
    sSheetName := Sheet.Name;
    iRowCount := DM1.adoAttach_Procedure.RecordCount;
    iColCount := DM1.adoAttach_Procedure.FieldCount;
    sBeginCell := RefToCell(iTitleLine+1, 1);
    sEndCell := RefToCell(iTitleLine+iRowCount+1, iColCount);
    Sheet.Range[sBeginCell, sEndCell].Value := vProcedureData;
    //SubTotal Row
    for i := 0 to iColCount-1 do
    begin
      if fn_IsNumericField(DM1.adoAttach_Procedure.Fields[i]) then
      begin
        sBeginCell := RefToCell(iTitleLine+iRowCount+1, i+1);
        sEndCell := RefToCell(iTitleLine+iRowCount+1, i+1);
        sFormulaBeginCell := RefToCell(iTitleLine+1, i+1);
        sFormulaEndCell := RefToCell(iTitleLine+iRowCount, i+1);
        Sheet.Range[sBeginCell, sEndCell].Formula := '=SUM('+sFormulaBeginCell+':'+sFormulaEndCell+')';
      end;
    end;
    //Save as Xlsx
    sFileName := ChangeFileExt(sFileAlias, '.xlsx'); //xlOpenXMLWorkbook(51) Xlsx Format / xlHtml
    vWorkBook.SaveAs(sFileName);
    Result := sFileName;

    //Save Sheet to Html
    sFileName := ChangeFileExt(sFileAlias, '.html');
    sBeginCell := RefToCell(1, 1);
    sEndCell := RefToCell(iTitleLine+iRowCount+1, iColCount);
    sRange := sBeginCell+':'+sEndCell;
    vWorkBook.PublishObjects.Add(xlSourceRange, sFileName, sSheetName, sRange, xlHtmlStatic).Publish(True);
  finally
    if not VarIsEmpty(XLApp) then
    begin
      vWorkBook.Close;
      XLApp.Quit;
      XLAPP := Unassigned;
      Sheet := Unassigned;
      Application.ProcessMessages;
    end;
  end;
end;

2021年4月22日 星期四

Delphi Ole excel container, Save Xlsx file

 
uses ComObj, Excel;

var Excel: OleVariant;
Excel := CreateOleObject('EXCEL.Application');
Excel.Application.Workbooks.Add;
Excel.Application.Workbooks[1].SaveAs('c:\test.xlsx', xlWorkbookDefault); // or xlOpenXMLWorkbook (51)
Excel.Application.Quit;

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

unit Excel;

interface

uses Windows, Activex;
// originally from Excel97.pas
// XlFileFormat constants

type
  XlFileFormat = TOleEnum;
const
  xlAddIn = $00000012;
  xlCSV = $00000006;
  xlCSVMac = $00000016;
  xlCSVMSDOS = $00000018;
  xlCSVWindows = $00000017;
  xlDBF2 = $00000007;
  xlDBF3 = $00000008;
  xlDBF4 = $0000000B;
  xlDIF = $00000009;
  xlExcel2 = $00000010;
  xlExcel2FarEast = $0000001B;
  xlExcel3 = $0000001D;
  xlExcel4 = $00000021;
  xlExcel5 = $00000027;
  xlExcel7 = $00000027;
  xlExcel9795 = $0000002B;
  xlExcel4Workbook = $00000023;
  xlIntlAddIn = $0000001A;
  xlIntlMacro = $00000019;
  xlWorkbookNormal = $FFFFEFD1;
  xlSYLK = $00000002;
  xlTemplate = $00000011;
  xlCurrentPlatformText = $FFFFEFC2;
  xlTextMac = $00000013;
  xlTextMSDOS = $00000015;
  xlTextPrinter = $00000024;
  xlTextWindows = $00000014;
  xlWJ2WD1 = $0000000E;
  xlWK1 = $00000005;
  xlWK1ALL = $0000001F;
  xlWK1FMT = $0000001E;
  xlWK3 = $0000000F;
  xlWK4 = $00000026;
  xlWK3FM3 = $00000020;
  xlWKS = $00000004;
  xlWorks2FarEast = $0000001C;
  xlWQ1 = $00000022;
  xlWJ3 = $00000028;
  xlWJ3FJ3 = $00000029;
  xlExcel12 =50;
  xlExcel8 = 56;
  xlHtml = 44;
  xlOpenXMLAddIn = 55;
  xlOpenXMLTemplate = 54;
  xlOpenXMLTemplateMacroEnabled = 53;
  xlOpenXMLWorkbook = 51;
  xlOpenXMLWorkbookMacroEnabled = 52;
  xlTemplate8 = 17;
  xlUnicodeText = 42;
  xlWebArchive = 45;
  xlWorkbookDefault = 51;
  xlXMLSpreadsheet = 46;

implementation
end.

轉貼至 https://stackoverflow.com/questions/9067053/delphi-ole-excel-container-save-file


XlFileFormat 枚举 (Excel)

指定保存工作表时的文件格式。

XLFILEFORMAT 枚举 (EXCEL)
名称说明扩展名
xlAddIn18Microsoft Excel 97-2003 外接程序*.xla
xlAddIn818Microsoft Excel 97-2003 外接程序*.xla
xlCSV6CSV*.csv
xlCSVMac22Macintosh CSV*.csv
xlCSVMSDOS24MSDOS CSV*.csv
xlCSVUTF862UTF8 CSV*.csv
xlCSVWindows23Windows CSV*.csv
xlCurrentPlatformText-4158当前平台文本*.txt
xlDBF27Dbase 2 格式*.dbf
xlDBF38Dbase 3 格式*.dbf
xlDBF411Dbase 4 格式*.dbf
xlDIF9数据交换格式*.dif
xlExcel1250Excel 二进制工作簿*.xlsb
xlExcel216Excel 版本 2.0 (1987)*.xls
xlExcel2FarEast27Excel 版本 2.0 中文 (1987)*.xls
xlExcel329Excel 版本 3.0 (1990)*.xls
xlExcel433Excel 版本 4.0 (1992)*.xls
xlExcel4Workbook35Excel 版本 4.0 工作簿格式 (1992)*.xlw
xlExcel539Excel 版本 5.0 (1994)*.xls
xlExcel739Excel 95(版本 7.0)*.xls
xlExcel856Excel 97-2003 工作簿*.xls
xlExcel979543Excel 版本 95 和 97*.xls
xlHtml44HTML 格式.htm;.html
xlIntlAddIn26国际外接程序无文件扩展名
xlIntlMacro25国际宏无文件扩展名
xlOpenDocumentSpreadsheet60OpenDocument 电子表格*.ods
xlOpenXMLAddIn55Open XML 外接程序*.xlam
xlOpenXMLStrictWorkbook61 (&H3D)Strict Open XML 文件*.xlsx
xlOpenXMLTemplate54Open XML 模板*.xltx
xlOpenXMLTemplateMacroEnabled53启用 Open XML 模板宏*.xltm
xlOpenXMLWorkbook51Open XML 工作簿*.xlsx
xlOpenXMLWorkbookMacroEnabled52启用 Open XML 工作簿宏*.xlsm
xlSYLK2符号链接格式*.slk
xlTemplate17Excel 模板格式*.xlt
xlTemplate817模板 8*.xlt
xlTextMac19Macintosh 文本*.txt
xlTextMSDOS21MSDOS 文本*.txt
xlTextPrinter36打印机文本*.prn
xlTextWindows20Windows 文本*.txt
xlUnicodeText42Unicode 文本无文件扩展名;*.txt
xlWebArchive45Web 档案.mh;.mhtml
xlWJ2WD114日语 1-2-3*.wj2
xlWJ340日语 1-2-3*.wj3
xlWJ3FJ341日语 1-2-3 格式*.wj3
xlWK15Lotus 1-2-3 格式*.wk1
xlWK1ALL31Lotus 1-2-3 格式*.wk1
xlWK1FMT30Lotus 1-2-3 格式*.wk1
xlWK315Lotus 1-2-3 格式*.wk3
xlWK3FM332Lotus 1-2-3 格式*.wk3
xlWK438Lotus 1-2-3 格式*.wk4
xlWKS4Lotus 1-2-3 格式*.wks
xlWorkbookDefault51默认工作簿*.xlsx
xlWorkbookNormal-4143常规工作簿*.xls
xlWorks2FarEast28Microsoft Works 2.0 两端对齐格式*.wks
xlWQ134Quattro Pro 格式*.wq1
xlXMLSpreadsheet46XML 电子表格*.xml


轉貼至:https://docs.microsoft.com/zh-cn/office/vba/api/excel.xlfileformat