format cell ของ excel

   
คือจะถาม เกี่ยวกับ format cell ของ excel อ่ะครับ มี code ดังนี้
SELECT result
COPY TO c:\reports DELIMITED WITH TAB
_cliptext = FILETOSTR('c:\reports.txt')
ERASE c:\reports.txt

oExcel = Createobject('Excel.Application')
oExcel.Workbooks.Add
oExcel.ActiveWorkbook.Worksheets(1).Select
oExcel.ActiveWorkbook.ActiveSheet.Range('A1').PasteSpecial

อยากเพิ่มเติมในส่วนของ format cell ได้ไหมครับ เช่น ให้ column A ทั้งหมดเป็น Text ของ column B เป็น Numberic column C เป็น Date อะไร ประมาณนี้อ่ะครับ
foxboy
20 ก.พ. 49 เวลา 15:37:49 น. --> 203.151.75.58,
   
   
ลองดูก่อนครับ ไม่รู้จะตรงตามที่ต้องการหรือป่าว

lo = oExcel.ActiveWorkbook.Worksheets(1)
oExcel.Visible = .T.
WITH lo.Cells(1, 1)
.Value = 1234.56
.NumberFormat = "$#,##0_);($#,##0)"
ENDWITH
WITH lo.Cells(1, 2)
.Value = "1234.56"
.NumberFormat = "@"
ENDWITH

กำหนดทั้งแถวหรือคอลัมภ์ก็ใช้ Range, Columns, Rows เช่น

lo.Columns(3).NumberFormat = "$#,##0_);($#,##0)"
lo.Columns(4).NumberFormat = "@"

ฟอกส์น้อย
20 ก.พ. 49 เวลา 18:48:40 น. --> 58.136.152.20,
  
   
แล้วถ้า format เป็น text อ่ะครับ ใช้อะไรหรือครับ
foxboy
21 ก.พ. 49 เวลา 7:53:41 น. --> 203.151.75.58,
  
   
ถ้าจะโอน จากรายงานมาที่ Excel เลย ใน net จะมีให้ d/l ลองเข้า google แล้วหาคำว่า frx2xls จะได้ข้อมูลมาไว้ที่ excel หน้าตาเหมือนรายงานที่สร้า

แต่ปรกติ ถ้าจะนำข้อมูลไว้ excel ส่วนใหญ่ น่าจะเป็นพวกข้อมูลดิบๆ คือไม่จัดอะไรเลย เอาแต่ข้อมูลไป ก็ใช้พวก copy to ก็ ok ส่วนจะ format cell ก็ตามคุณ ฟอกซ์น้อย

หรือจะใช้ tools ที่ผมสร้างไว้ โอนก็ตามนี้ (สามารถโอนฟิลด์ memo ได้ แต่จะได้ไม่เกิน 254 ตัว)

* dbf2excel.prg
PARAMETERS abFieldHeader
* by Kasem Kamolchaipisit
* Example1 : SELECT * FROM <tablename> INTO CURSOR <cursorname>
* SELECT <cursorname>
* DO DBF2EXCEL
* OR DO DBF2EXCEL WITH '&Euml;&Ntilde;&Ccedil;&curren;&Iacute;&Aring;&Ntilde;&Aacute;&sup1;&igrave;&middot;&Otilde;&egrave;1,&Euml;&Ntilde;&Ccedil;&curren;&Iacute;&Aring;&Ntilde;&Aacute;&sup1;&igrave;&middot;&Otilde;&egrave;2,...,&Euml;&Ntilde;&Ccedil;&curren;&Iacute;&Aring;&Ntilde;&Aacute;&sup1;&igrave;&middot;&Otilde;&egrave; n'
* Excample2: USE <tablename>
* DO DBF2EXCEL
* OR DO DBF2EXCEL WITH '&Euml;&Ntilde;&Ccedil;&curren;&Iacute;&Aring;&Ntilde;&Aacute;&sup1;&igrave;&middot;&Otilde;&egrave;1,&Euml;&Ntilde;&Ccedil;&curren;&Iacute;&Aring;&Ntilde;&Aacute;&sup1;&igrave;&middot;&Otilde;&egrave;2,...,&Euml;&Ntilde;&Ccedil;&curren;&Iacute;&Aring;&Ntilde;&Aacute;&sup1;&igrave;&middot;&Otilde;&egrave; n'

lcTableAlias = ALIAS()
SELECT (lcTableAlias)
IF EMPTY(lcTableAlias)
=MESSAGEBOX("&auml;&Aacute;&egrave;&frac34;&ordm;&micro;&Ograve;&Atilde;&Ograve;&sect;&middot;&Otilde;&egrave;&uml;&ETH;&middot;&Oacute;&iexcl;&Ograve;&Atilde;&acirc;&Iacute;&sup1;&Acirc;&eacute;&Ograve;&Acirc;&cent;&eacute;&Iacute;&Aacute;&Ugrave;&Aring;",16,"&frac14;&Ocirc;&acute;&frac34;&Aring;&Ograve;&acute;")
RETURN && If no table is open, then return *!*
ENDIF
lnReccount = RECCOUNT(lcTableAlias)
IF lnReccount > 65534
=MESSAGEBOX("&cent;&eacute;&Iacute;&Aacute;&Ugrave;&Aring;&middot;&Otilde;&egrave;&middot;&Oacute;&iexcl;&Ograve;&Atilde;&acirc;&Iacute;&sup1;&Aacute;&Otilde;&uml;&Oacute;&sup1;&Ccedil;&sup1;&Aacute;&Ograve;&iexcl;&iexcl;&Ccedil;&egrave;&Ograve;&frac34;&times;&eacute;&sup1;&middot;&Otilde;&egrave;&atilde;&sup1;&micro;&Ograve;&Atilde;&Ograve;&sect; Excel" + CHR(13) + '&Ecirc;&Ograve;&Aacute;&Ograve;&Atilde;&para;&acirc;&Iacute;&sup1;&cent;&eacute;&Iacute;&Aacute;&Ugrave;&Aring;&Aacute;&Ograve;&auml;&acute;&eacute;&agrave;&frac34;&Otilde;&Acirc;&sect; 65,534 &Atilde;&Ograve;&Acirc;&iexcl;&Ograve;&Atilde;',48,"&aacute;&uml;&eacute;&sect;&agrave;&micro;&times;&Iacute;&sup1;")
ENDIF

lnArray = AFIELDS(laFieldName,lcTableAlias)

oExcel = CREATEOBJECT('Excel.Application')
oExcel.Visible = .T.
oWorkBook = oExcel.Workbooks.Add
oWorkSheet = oWorkBook.Worksheets(1)

WITH oExcel.ActiveSheet
.Name = lcTableAlias
oRange = .Range("A1:IV1")
*** abHeader
IF !EMPTY(abFieldHeader)
abFieldHeader = ","+abFieldHeader+","
abField = OCCURS(',',abFieldHeader)
IF abField = 0
oRange.Cells[1,1].Value = abFieldHeader
ELSE
FOR lnColumn = 1 TO abField - 1
oRange.Cells[1, lnColumn].Value = SUBSTR(abFieldHeader,AT(',',abFieldHeader,lnColumn)+1, ;
AT(',',abFieldHeader,lncolumn+1)-AT(',',abFieldHeader,lnColumn)-1)
oRange.Cells[1, lnColumn].Font.Name = [AngsanaUPC]
oRange.Cells[1, lnColumn].Font.Size = 14
oRange.Cells[1, lnColumn].Font.Bold = .T.
ENDFOR
ENDIF
ELSE
*** Field Header
FOR lnColumn = 1 TO lnArray
oRange.Cells[1, lnColumn].Value = laFieldName(lnColumn,1)
oRange.Cells[1, lnColumn].Font.Name = [AngsanaUPC]
oRange.Cells[1, lnColumn].Font.Size = 14
oRange.Cells[1, lnColumn].Font.Bold = .T.
ENDFOR
ENDIF
****
oRange = .Range("A2:IV65535")
lnRow = 0
SCAN
lnRow = lnRow + 1
FOR lnColumn = 1 TO lnArray
IF EMPTY(EVALUATE(laFieldName(lnColumn,1))) AND TYPE('EVALUATE(laFieldName(lnColumn,1))') $ 'D.T'
* &Ccedil;&Ntilde;&sup1;&middot;&Otilde;&egrave;&agrave;&raquo;&ccedil;&sup1; &Ccedil;&egrave;&Ograve;&sect; &auml;&Aacute;&egrave;&Aacute;&Otilde;&iexcl;&Ograve;&Atilde; repalce
ELSE
DO CASE
CASE laFieldName(lnColumn,2) $ 'C.M.L' && Character, Memo, Ligical
lcTextFormat = "@"
CASE laFieldName(lnColumn,2) $ 'D.T' && Date , Date Time
lcTextFormat = "dd-mm-yyyy"
CASE laFieldName(lnColumn,2) $ 'I.N.Y' && Integer , Numeric
lcTextFormat = "0"
OTHERWISE
lcTextFormat = "@"
ENDCASE
oRange.Cells[lnRow, lnColumn].NumberFormat = lcTextFormat
oRange.Cells[lnRow, lnColumn].Value = EVALUATE(laFieldName(lnColumn,1))
ENDIF
ENDFOR
ENDSCAN
oRange.Columns.AutoFit()
ENDWITH
RETURN


เกษม
21 ก.พ. 49 เวลา 10:40:49 น. --> 203.118.85.60,
  
   
อ๋อ สรุป เป็น text ใช้คำสั่งนี้
oExcel.ActiveWorkbook.Worksheets(1).Columns(1).NumberFormat = "@"
ใช่ไหมครับ จะลองดู ขอบคุณ คุณ ฟอกส์น้อย กับ คุณ เกษม มากนะครับ
foxboy
21 ก.พ. 49 เวลา 11:16:01 น. --> 203.151.75.58,
  
ขอเชิญร่วมตอบคำถามครับ
 
ผู้ตอบ :
รหัสผ่าน :
รูปภาพ :
คำตอบ :