<rt id="bn8ez"></rt>
<label id="bn8ez"></label>

  • <span id="bn8ez"></span>

    <label id="bn8ez"><meter id="bn8ez"></meter></label>

    MDA/MDD/TDD/DDD/DDDDDDD
    posts - 536, comments - 111, trackbacks - 0, articles - 0
      BlogJava :: 首頁 :: 新隨筆 :: 聯系 :: 聚合  :: 管理

    1,
    一個需求, 要求報表生成的Excel表格支持超鏈接。例如點擊Excel內的公司名, 自動打開瀏覽器并連到該公司的網站上去。在Excel里面選中所需的單元格, 右鍵彈出屬性, 選超鏈接就能輸入相應的地址了,既然Excel支持超鏈接。那就沒有什么借口說不能實現了。:).

    翻了翻POI的文檔, 很容易就找到了解決方案。在POI中讓單元格實現超鏈接功能, 可以用Hyperlink 函數。HYPERLINK函數包含兩個參數,第一個參數是指向的地址,第二個參數是顯示的字符串

    cell = row.createCell(colNumber)。
    cell.setCellType(HSSFCell.CELL_TYPE_FORMULA);
    cell.setCellFormula("HYPERLINK(\"" + "Http://www.google.ca"+ "\",\"" + "Google Canada"+ "\")");
    或cell.setCellFormula("HYPERLINK(\"[workbook.xls]'sheet2'!A1\",\"homepage\")"); //HYPERLINK("#明細!A1","homepage"),#代表本工作簿,來源http://club.excelhome.net/thread-54081-1-1.html

    現在超鏈接單元格看起來和一般的單元格沒有分別, 除非你把鼠標放上去才會變成手行光標。 為了和一般的習慣相符, 還需要把字符顏色變成藍色和加上下劃線。 這就要用到 style了、

    HSSFCellStyle linkStyle = workbook.createCellStyle();
    HSSFFont cellFont= workbook.createFont();
    cellFont.setUnderline((byte) 1);
    cellFont.setColor(HSSFColor.BLUE.index);
    linkStyle.setFont(cellFont);

    最后把style應用到cell上去就大功告成了。
    cell.setCellStyle(linkStyle);

    以上修改自http://sunnylei2008.blogspot.com/2007/07/poihssf.html
    和http://diystyle.javaeye.com/blog/132093
    還有http://blog.csdn.net/xunyiren/archive/2007/03/08/1524533.aspx

    2,
    以下來自http://www.javaeye.com/topic/25569,是用jxl解決的。
    看了POI文檔,找到一個LinkedDataFormulaField 和LinkedDataRecord,jxl文檔里有 Hyperlink,現在想對一個excel中的一組sheet做一個索引,方便查找每張sheet,
    String outputFile="D:/導出接口.xls";
    try
    {
    Workbook wb=Workbook.getWorkbook(new File(outputFile)); //Excel獲得文件
    //打開一個文件的副本,并且指定數據寫回到原文件
    WritableWorkbook book=Workbook.createWorkbook(new File(outputFile),wb);
    WritableSheet sheet=book.createSheet("導出目標",0); //添加一個工作表
    String[] oriSheetNames=wb.getSheetNames();? //獲得源excel文件中的所有sheet名稱
    ?for(int i=0;i<book.getNumberOfSheets();i++)
    ?{
    ??? sheet.addCell(new Label(0,i+1,String.valueOf(i+1)));? //第一列寫入編號
    /**
    * public WritableHyperlink(int col,int row,java.lang.String desc,WritableSheet sheet,int destcol,int destrow)
    * Constructs a hyperlink to some cells within this workbook
    * col - the column containing this hyperlink
    * row - the row containing this hyperlink
    * desc - the cell contents for this hyperlink
    * sheet - the sheet containing the cells to be linked to
    * destcol - the column number of the first destination linked cell
    * destrow - the row number of the first destination linked cell
    * */
    sheet.addHyperlink(new WritableHyperlink(1,i+1,oriSheetNames[i],book.getSheet(oriSheetNames[i]),0,0));
    book.write();
    book.close();
    wb.close();
    }catch(IOException e)
    {
    ??? System.out.println("異常: "+e);
    }
    catch(BiffException e)
    {
    ??? System.out.println("異常: "+e);
    }
    catch(RowsExceededException e)
    {
    ??? System.out.println("異常: "+e);
    }
    catch(WriteException e)
    {
    ??? System.out.println("異常: "+e);
    }

    3,公式里的亂碼如何解決,來源:http://topic.csdn.net/t/20060309/10/4602637.html,作者阿水
    前幾天做項目的過程中,利用到Apache項目中的POI來實現基于Excel的數據模板輸出,其中利用公式的方式嵌入超鏈接進行網頁鏈接訪問。 ?
    ? 自己做了一些處理EXCEL單元格的方法,但在進行公式處理時,由于POI的問題,顯示的公式信息一直都是亂碼,后來在網上找到一些朋友關于這些問題的解 決方法,感覺幫助很大。因此,結合自己的實踐經驗,把修改POI內部源碼的過程寫出來,以其對資料做一整理,希望對后來的朋友也有所幫助。 ?
    ? ?
    ? 1、首先,上網找到POI的發布版本的源碼,我下的是poi-src-2.5.1-final-20040804.zip這個版本。 ?
    ? 2、找到StringPtg.java這個文件,在解壓后的\src\java\org\apache\poi\hssf\record\formula文件夾下面 ?
    ? 3、利用文本編輯工具對StringPtg.java進行編輯 ?
    ? 4、找到public ? StringPtg(byte ? [] ? data, ? int ? offset)這個方法, ?
    ? 對其修改如下 ?
    ? /** ? Create ? a ? StringPtg ? from ? a ? byte ? array ? read ? from ? disk ? */ ?
    ? ? ? ? ? public ? StringPtg(byte ? [] ? data, ? int ? offset) ?
    ? ? ? ? ? { ?
    ? ? ? ? ? ? ? ? ? offset++; ?
    ? ? ? ? ? ? ? ? ? field_1_length ? = ? data[offset]; ?
    ? ? ? ? ? ? ? ? ? field_2_options ? = ? data[offset+1]; ?
    ? ? ? ? ? ? ? ? ? if ? (fHighByte.isSet(field_2_options)) ? { ?
    ? ? ? ? ? ? ? ? ? ? ? ? ? // ? modified ? by ? rainsoft ? ?
    ? ? ? ? ? ? ? ? ? ? ? ? ? // ? in ? excel ? chinese ? is ? stored ? two ? bytes ? HIGH ? bytes,LOW ? bytes ?
    ? ? ? ? ? ? ? ? ? ? ? ? ? // ? field_3_string= ? StringUtil.getFromUnicode(data,offset+2,field_1_length); ?
    ? ? ? ? ? ? ? ? ? ? ? ? ? field_3_string= ? StringUtil.getFromUnicodeHigh(data,offset+2,field_1_length); ?
    ? ? ? ? ? ? ? ? ? }else ? { ?
    ? ? ? ? ? ? ? ? ? ? ? ? ? field_3_string=StringUtil.getFromCompressedUnicode(data,offset+2,field_1_length); ?
    ? ? ? ? ? ? ? ? ? } ?
    ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ?
    ? ? ? ? ? ? ? ? ? //setValue(new ? String(data, ? offset+3, ? data[offset+1] ? + ? 256*data[offset+2])); ?
    ? ? ? ? ? } ?
    ? 其中主要利用getFromUnicodeHigh方法替換原有的方法進行處理。 ?
    ? 5、再查找StringPtg(String ? value),做如下的修改, ?
    ? ?
    ? public ? StringPtg(String ? value) ? { ?
    ? ? ? ? ? ? ? ? ? if ? (value.length() ? >255) ? { ?
    ? ? ? ? ? ? ? ? ? ? ? ? ? throw ? new ? IllegalArgumentException("String ? literals ? in ? formulas ? cant ? be ? bigger ? than ? 255 ? characters ? ASCII"); ?
    ? ? ? ? ? ? ? ? ? } ?
    ? ? ? ? ? ? ? ? ? this.field_2_options=0; ?
    ? ? ? ? ? ? ? ? ? // ? add ? by ? rainsoft ?
    ? ? ? ? ? ? ? ? ? // ? two ? bytes ? char ? options ? must ? be ? "1" ? ? ? ? ? ? ?
    ? ? ? ? ? ? ? ? ? try ? { ?
    ? ? ? ? ? ? ? ? ? ? ? if ? (value.length()!=value.getBytes("GBK").length) ?
    ? ? ? ? ? ? ? ? ? ? ? ? ? this.field_2_options=1; ?
    ? ? ? ? ? ? ? ? ? } ? catch ? (Exception ? e) ? { ?
    ? ? ? ? ? ? ? ? ? } ?
    ? ? ? ? ? ? ? ? ? // ? end ? add ?
    ? ? ? ? ? ? ? ? ? this.fHighByte.setBoolean(field_2_options, ? false); ?
    ? ? ? ? ? ? ? ? ? this.field_3_string=value; ?
    ? ? ? ? ? ? ? ? ? this.field_1_length=(byte)value.length(); ? //for ? the ? moment, ? we ? support ? only ? ASCII ? strings ? in ? formulas ? we ? create ?
    ? ? ? ? ? } ?
    ? ?
    ? 6、至此對源文件的修改就結束了,下一步則需要對其進行編譯輸出。 ?
    ? 7、利用docs/howtobuild.html的描述進行編譯輸出。 ?

    后注:按上面的辦法,中文問題是解決了,但點擊鏈接還是報"引用無效",觀察了一會,原來是sheet名帶有括號造成的。
    ?

    posted @ 2008-10-21 22:11 leekiang 閱讀(4426) | 評論 (1)編輯 收藏

    http://www.fileformat.info/tool/regex.htm

    posted @ 2008-10-21 22:07 leekiang 閱讀(5486) | 評論 (3)編輯 收藏

    我們自己寫了一個Grid。 其中一個功能是根據每列的數據, 計算出每一列的最小寬度, 然后用 style="width:90px" 的方式Render出來。 其中涉及到根據每一行字符串的長度轉換成Pixel。然后取最大值。

    具體的轉換關系是:
    1 point = 1/72 inch
    1 pixel = 0.75 points.

    那么一個character 是多少Pixels呢? 答案是這條公式: (Column Width) Pixels = Column Width (Characters) × 5 + 5。


    例如 "Hello World" 是 11×5+5=60 Pixels。

    轉自:http://sunnylei2008.blogspot.com/2007/09/blog-post_1295.html

    posted @ 2008-10-21 22:04 leekiang 閱讀(643) | 評論 (0)編輯 收藏

    1,SQL Pretty Printer
    能對sql進行各種格式化。
    有多種版本??砂惭b使用,也可使用在線版:
    http://www.wangz.net/cgi-bin/pp/gsqlparser/sqlpp/sqlformat.tpl

    posted @ 2008-10-21 21:59 leekiang 閱讀(181) | 評論 (0)編輯 收藏

    TPS 是Transactions Per Second 的 縮 寫, 也 就 是 事 務 數/ 秒。 它 是軟件測試結 果 的 測 量 單 位。 一 個 事 務 是 指 一 個 客 戶 機 向 服 務 器 發 送 請 求 然 后 服 務 器 做 出 反 應 的 過 程。 客 戶 機 在 發 送 請 求 時 開 始 計 時, 收 到 服 務 器 響 應 后 結 束 計 時, 以 此 來 計 算 使 用 的 時 間 和 完 成 的 事 務 個 數, 最 終 利 用 這 些 信 息 來 估 計 得 分。 客 戶 機 使 用 加 權 協 函 數 平 均 方 法 來 計 算 客 戶 機 的得 分,測試軟件就是 利 用 客 戶 機 的 這 些 信 息 使 用 加 權 協 函 數 平 均 方 法 來 計 算 服 務 器 端 的 整 體TPS 得 分。

    posted @ 2008-10-21 13:55 leekiang 閱讀(883) | 評論 (0)編輯 收藏

    離線并發的來源

    ???????? Web 項目中,離線并發顯得尤其嚴重。例如,用戶 A 和用戶 B 同時修改數據庫中的某張表的 R 行,加入 R 行有兩個字段分別是 C1 , C2

    ???????? 假如按照如下過程修改:

    ???????? 1 用戶 A 將數據 R C1,C2 )讀取到 A 的瀏覽器中。

    ???????? 2 用戶 B 將數據 R C1,C2 )讀取到 B 的瀏覽器中。

    ???????? 3 用戶 A 在瀏覽器上將數據修改為 R C1’ , C2 ),同時更新到數據庫。

    ???????? 4 用戶 B 在瀏覽器上將數據修改為 R C1 C2’ ),同時更新到數據庫。

    ????????

    ???????? 上述過程存在兩個問題,第一,第 4 B 在修改數據的時候數據庫中的數據和 B 的瀏覽器中數據已經不一致了;第二,如果程序按照哪個字段變化在數據庫中更新哪個字段的方式處理的話,那么經過上述四步修改,數據庫中 R 行的內容是( C1’,C2’ ),這和 A 或者 B 的想法都不同( A 認為是( C1’ C2 ), B 認為是( C1 C2’ ))。

    ?

    ???????? 上述過程中 A 對數據庫的修改過程或者 B 對數據庫的修改過程,都是無法根據數據庫的最新內容做修改,所以成為離線。 A B 同時對記錄 R 進行就該叫離線。

    ???????? 以上的環境叫離線并發。

    ???????? 那么如何解決離線并發過程中遇到的問題呢?我們引入鎖機制。

    鎖機制

    ???????? 鎖機制,就是在需要修改的數據上加互斥鎖,通過互斥鎖避免數據被同時修改。鎖機制更具其應用環境又分為樂觀鎖悲觀鎖

    ???????? 樂觀鎖

    樂觀鎖,指認為沖突很少發生,所以只是在數據修改的時候比較修改的基礎數據和數據庫中的數據是否相同,相同則修改,否則提示用戶重新裝入數據庫中已經變化的數據。

    實現方法 1 :在進行 update 的時候使用 where 條件,在 Where 標間中比較所有上一步中查詢得到的數據。如果數據庫中的數據沒有變化,則 update 可以更新到內容,否則 update 語句不能更新到內容,可以根據 update 的返回值確定更新是否成功。

    實現方法 2 :在每一個表中追加一個特殊字段,類型為 timestamp ,每次更新的時候比較這個字段的值是否一致,如果一致,則更新,同時將這個字段更新為當前時間,否則,說明數據已經變更。這也可以使用 update 加上 where 實現。

    ???????? 悲觀鎖

    悲觀鎖指,需要修改的數據,在讀取的時候就對數據加鎖,其他用戶在準備修改,讀取數據的階段判斷數據是否上鎖,以此來決定是否進行修改前的讀操作。

    ???????? ???????? 實現方法:

    ?????????????????? 通常在數據庫中建立一張 lock 表,該表的字段包括,表明,唯一索引,時間,用戶信息等。

    在用戶讀取數據準備修改的時候,首先判斷 lock 表中是否存在自己將要讀取的數據。

    如果不存在,則在 lock 表中添加一條記錄,記錄對那張表的哪行數據進行修改;如果存在,在判斷時間字段是否超時。

    如果超時,則更新 lock 表中本條記錄的時間字段。(防止死鎖的必要手段)

    如果存在,也不超時,說明本條記錄正在被其他用戶修改,則返回并發信息。

    出處:http://blog.csdn.net/struts2/archive/2007/08/14/1742686.aspx

    posted @ 2008-10-19 00:51 leekiang 閱讀(721) | 評論 (0)編輯 收藏

    python處理字符串很容易,但是在處理中文時候需要注意一些問題。
    比如:

    a = "我們是python愛好者"
    print a[0]

    只能輸出“我”字的前半部分,要想輸出整個的我字還需要

    b = a[0:2]
    print b

    才行,很不方便,并且當一段文本中同時有中英文?氖焙蠔苣汛懟?
    最好的辦法就是轉換為unicode。

    像這樣:

    c = unicode(a, "gb2312")
    print c[0]

    這個時候c的下標對應的就是每一字,不再是字節,并且通過 len(c) 就可以獲得字數!
    還可以很方便的轉換為其他編碼,比如轉換為 utf-8

    d = c.encode("utf-8")

    轉自 http://www.okpython.com/bbs/viewthread.php?tid=311

    posted @ 2008-10-09 21:46 leekiang 閱讀(1210) | 評論 (0)編輯 收藏

    1,周轉件:周轉材料是可以重復使用的物資,如模板、腳手架等
    2,物資計價方式一般有3種:移動平均,加權平均,先進先出。
    ?? 先進先出時最終肯定能保證入庫金額-出庫金額=庫存余額,不會因為四舍五入導致數據不一致。原因在于:如果同一批次分多次領,最后一次領時肯定是把所有的余額全部領走。
    3,
    采用先進先出時,物資種類表里的物資單價,會隨著該物資的每一次入庫或者出庫而變動,這個單價只能供參考,沒有實際意義。

    4,先進先出模式時,允許手動選擇某個批次出庫。
    而移動平均時,
    物資單價會隨著該物資的每一次入庫而變動。這時應該不允許手動選擇某個批次出庫了,否則想不清該怎么計算。

    5,http://www.chinasbz.com/accountant/girl.asp?id=1241
    月末一次加權平均法
    加權平均法也叫全月一次加權平均法,指以本月收入全部存貨數量加月初存貨數量作為權數,去除本月收入全部存貨成本加月初存貨成本的和,計算出存貨的加權平均單位成本,從而確定存貨的發出成本和庫存成本的方法。計算公式如下:
    ?加權平均單價=(本月收入全部存貨數量加+月初存貨數量)/(本月收入全部存貨成本+月初存貨成本)
    本月發出存貨成本=本月發出存貨數量×加權平均單價
    月末結存存貨成本=月末庫存存貨數量×加權平均單價

    移動加權平均法。
    移動平均法亦稱移動加權平均法,指本次收貨的成本加原有庫存的成本,除以本次收貨數量加原有存貨數量,據以計算加權平均單價,并對發出存貨進行計價的一種方 法。移動平均法與加權平均法的計算原理基本相同,不同的是加權平均法一個月計算一次單位成本,而移動平均法每收進一次存貨,就計算一次單位成本。計算公式 如下:
    移動平均單價=(本次進貨的成本+原有庫存的成本)/(本次進貨數量+原有存貨數量)
    本批發出存貨成本=本批發出存貨數量x存貨當前移動平均單價

    這樣看來,我認為物資系統才用加權平均來計價就不合適了,因為領料時的價格肯定是馬上要確定的,而如果采用加權平均,當月領料的價格要到下月初才知道。

    10,其他有用的帖子
    http://topic.csdn.net/u/20070112/09/f04597db-1a99-467c-940e-d0d0a608c1fa.html
    新會計準則取消了后進先出(LIFO)和移動加權平均,只能使用FIFO和標準成本?
    計劃價與移動加權平均,他人之體會

    posted @ 2008-10-09 16:13 leekiang 閱讀(312) | 評論 (0)編輯 收藏

    1,批量修改明細時要判斷主單的狀態是否允許,可用exists變通解決
    ?

    update TB_DETAIL d

    ??????? set d.flag= 1,

    ?????????? d.enabletime=sysdate

    ????? where d.testfield='AAA' and

    exists (select *

    ?????????????? from TB_DETAIL tempd

    ?????????????? left join TB_MAIN m on tempd.mainid = m.mainid

    ????????????? where m.status = 'true'

    ??????????????? and tempd.detailid = d.detailid);

    2,查找某些字段重復的記錄,可先對那幾個字段分組,然后看個數,個數大于1的就說明有重復。但這樣查出的是所有重復的記錄,如果不想重復,再distinct一下
    ??? --如:查找stuid重復的記錄
      select * from stuinfo
      where stuid in (
      select stuid from stuinfo
      group by stuid
      having(count(*))>1
      )
    ? 參考

    posted @ 2008-10-08 19:19 leekiang 閱讀(190) | 評論 (0)編輯 收藏

    ?

    posted @ 2008-10-08 18:39 leekiang 閱讀(204) | 評論 (0)編輯 收藏

    僅列出標題
    共54頁: First 上一頁 30 31 32 33 34 35 36 37 38 下一頁 Last 
    主站蜘蛛池模板: 亚洲色偷偷综合亚洲AV伊人蜜桃 | 伊人久久亚洲综合| 亚洲精品午夜久久久伊人| 无码av免费毛片一区二区| 在线观看亚洲精品专区| 国产亚洲一区二区在线观看 | 免费看国产曰批40分钟| 中文字幕亚洲码在线| 国产91免费在线观看| 国产亚洲精品2021自在线| 亚洲av日韩av高潮潮喷无码| 免费精品久久天干天干| 亚洲国产高清美女在线观看| 日产国产精品亚洲系列| 免费大片黄在线观看| 国产伦精品一区二区三区免费迷| 亚洲А∨精品天堂在线| 亚洲变态另类一区二区三区 | 亚洲AV区无码字幕中文色| 女人张开腿等男人桶免费视频 | 亚洲精品色播一区二区| 亚洲一区AV无码少妇电影☆| 成人女人A级毛片免费软件| 亚洲深深色噜噜狠狠网站| 中文字幕久久亚洲一区| 免费高清在线影片一区| 久久国产乱子伦精品免费看| 日韩成人毛片高清视频免费看| 亚洲一区二区三区91| 国产亚洲精品无码成人| 国产在线a不卡免费视频| 久久久久av无码免费网 | 国产精品免费视频网站| 99在线观看精品免费99| yellow免费网站| 亚洲AV无码一区东京热| 免费在线观看一级毛片| 人与动性xxxxx免费| 亚洲一区综合在线播放| 久久影院亚洲一区| 国产免费变态视频网址网站 |