Private Function ExportExcel(ByVal strProjGUID As String, ByVal strBldGUIDList As String) As String
Try
Dim INT_STARTROW As Integer = 9
Dim INT_ENDCOL As Integer = 10
Dim INT_STARTCOL As Integer = 7
Dim templateFileName As String = Server.MapPath("/Slxt/CWGL/Excel模板.xls")
Dim workbook As NPOI.HSSF.UserModel.HSSFWorkbook = CreateExcel(templateFileName)
Dim ws As NPOI.HSSF.UserModel.HSSFSheet = workbook.GetSheetAt(0)
Dim wsRange As NPOI.HSSF.UserModel.HSSFSheet = workbook.GetSheetAt(1)
'Dim wsRange As NPOI.HSSF.UserModel.HSSFSheet = workbook.CreateSheet("ShtDictionary")
Dim row As NPOI.HSSF.UserModel.HSSFRow
Dim cell As NPOI.HSSF.UserModel.HSSFCell
Dim constraint, constraint1 As NPOI.HSSF.UserModel.DVConstraint
Dim dataValidation As NPOI.HSSF.UserModel.HSSFDataValidation
Dim dataValidation2 As NPOI.HSSF.UserModel.HSSFDataValidation
Dim styleReadonly As NPOI.HSSF.UserModel.HSSFCellStyle = workbook.CreateCellStyle()
Dim styleEdit As NPOI.HSSF.UserModel.HSSFCellStyle = workbook.CreateCellStyle()
Dim font As NPOI.HSSF.UserModel.HSSFFont
'设置样式变量
styleReadonly.FillForegroundColor = NPOI.HSSF.Util.HSSFColor.Grey25Percent.Index
styleReadonly.FillPattern = NPOI.SS.UserModel.FillPattern.ThickBackwardDiagonals
styleReadonly.FillBackgroundColor = NPOI.HSSF.Util.HSSFColor.Grey25Percent.Index
'1.2.设置字体
font = workbook.CreateFont()
font.Color = NPOI.HSSF.Util.HSSFColor.Black.Index
'font.FontHeightInPoints = 11.0
font.FontName = "宋体"
styleReadonly.SetFont(font)
'1.3.设置只读
styleReadonly.IsLocked = True
'2.设置可编辑单元格样式
'2.1.设置单元格背景色
styleEdit.FillForegroundColor = NPOI.HSSF.Util.HSSFColor.White.Index
styleEdit.FillPattern = NPOI.SS.UserModel.FillPattern.ThickBackwardDiagonals
styleEdit.FillBackgroundColor = NPOI.HSSF.Util.HSSFColor.White.Index
styleEdit.DataFormat = NPOI.HSSF.UserModel.HSSFDataFormat.GetBuiltinFormat("@")
'2.2.设置字体
font = workbook.CreateFont()
font.Color = NPOI.HSSF.Util.HSSFColor.Blue.Index
'font.FontHeightInPoints = 11.0
font.FontName = "宋体"
styleEdit.SetFont(font)
'2.3.设置可编辑
styleEdit.IsLocked = False
'3.0 设置标题行字体
Dim styleRed As NPOI.HSSF.UserModel.HSSFCellStyle = workbook.CreateCellStyle()
Dim fontRed As NPOI.HSSF.UserModel.HSSFFont = workbook.CreateFont()
'3.1.设置字体
fontRed.Color = NPOI.HSSF.Util.HSSFColor.Red.Index
fontRed.FontName = "宋体"
'4.0 数据行“--”只读且居右
Dim noneStyle As NPOI.HSSF.UserModel.HSSFCellStyle = workbook.CreateCellStyle()
Dim noneFont As NPOI.HSSF.UserModel.HSSFFont = workbook.CreateFont()
'4.1.设置单元格背景色
noneStyle.FillForegroundColor = NPOI.HSSF.Util.HSSFColor.Grey25Percent.Index
noneStyle.FillPattern = NPOI.SS.UserModel.FillPattern.ThickBackwardDiagonals
noneStyle.FillBackgroundColor = NPOI.HSSF.Util.HSSFColor.Grey25Percent.Index
noneStyle.Alignment = NPOI.SS.UserModel.HorizontalAlignment.Right
'4.2.设置字体
noneFont.Color = NPOI.HSSF.Util.HSSFColor.Black.Index
noneFont.FontName = "宋体"
noneStyle.SetFont(noneFont)
'4.3.设置不可编辑
noneStyle.IsLocked = True
Dim strSQL As String = ""
'先填充表1,用于引用值范围
strSQL = " select Jzkj from s_Jzkj where buGUID='" & Session("BUGUID") & "' and IsQy=1 order by JzkjGUID"
Dim i, j As Integer
Dim dtRange As DataTable = MyDB.GetDataTable(strSQL)
Dim rowCountRange As Integer = dtRange.Rows.Count
Dim SheetName = "Sheet2"
For i = 0 To rowCountRange - 1
row = GetRow(wsRange, i)
cell = GetCell(row, 0)
cell.SetCellValue(dtRange.Rows(i).Item("Jzkj").ToString)
Next
cell = GetCell(GetRow(wsRange, 0), 1)
cell.SetCellValue("未结转")
cell = GetCell(GetRow(wsRange, 1), 1)
cell.SetCellValue("预结转")
cell = GetCell(GetRow(wsRange, 2), 1)
cell.SetCellValue("结转")
'wsRange.ProtectSheet("slxt")
Dim range1 As NPOI.SS.UserModel.IName = workbook.CreateName()
range1.RefersToFormula = String.Format("Sheet2!$A$1:$A${0}", rowCountRange)
range1.NameName = "TypeRange"
Dim range2 As NPOI.SS.UserModel.IName = workbook.CreateName()
range2.RefersToFormula = "Sheet2!$B$1:$B$3"
range2.NameName = "StatusRange"
strBldGUIDList = strBldGUIDList.Replace(";", "','")
strSQL = "select " &
"recordGUID,ProjName,AreaName,BldName,RoomCode,RoomInfo,CarryOverStatus,CarryOverType,isnull(CarryOverMonth,'') as CarryOverMonth, isnull(LEFT(CarryOverMonth,4),'') AS CarryOverYear, convert(varchar(10),FactJFDate,120) as FactJFDate " &
"FROM vs_SaleCarryOver WHERE projGUID='" & strProjGUID & "' AND CarryOverStatus='未结转' and bldGUID in('" & strBldGUIDList & "')"
Dim dtTemp As DataTable = MyDB.GetDataTable(strSQL)
'插入记录行
Dim rowCount As Integer = dtTemp.Rows.Count
For i = 0 To rowCount - 1
row = GetRow(ws, i + INT_STARTROW)
For j = 0 To INT_ENDCOL
cell = GetCell(row, j)
cell.SetCellValue(dtTemp.Rows(i)(j).ToString)
If j < 6 Then
cell.CellStyle = noneStyle
Else
cell.CellStyle = styleEdit
End If
Next
Next
constraint = NPOI.HSSF.UserModel.DVConstraint.CreateNumericConstraint(NPOI.HSSF.UserModel.DVConstraint.ValidationType.DECIMAL, NPOI.HSSF.UserModel.DVConstraint.OperatorType.BETWEEN, "0", "99999999999.99")
//constraint = NPOI.HSSF.UserModel.DVConstraint.CreateFormulaListConstraint("TypeRange")
dataValidation = New NPOI.HSSF.UserModel.HSSFDataValidation(New NPOI.SS.Util.CellRangeAddressList(INT_STARTROW, 65535, 7, 7), constraint)
ws.AddValidationData(dataValidation)
constraint1 = NPOI.HSSF.UserModel.DVConstraint.CreateFormulaListConstraint("StatusRange")
dataValidation2 = New NPOI.HSSF.UserModel.HSSFDataValidation(New NPOI.SS.Util.CellRangeAddressList(INT_STARTROW, 65535, 6, 6), constraint1)
ws.AddValidationData(dataValidation2)
ws.ProtectSheet("slxt")
Dim strFileName As String = "/TempFiles/" & CInt(Int(&H7FFFFFFF * Rnd(9999) + 1)).ToString & ".xls"
Using fs As New FileStream(Server.MapPath(strFileName), FileMode.Create)
workbook.Write(fs)
fs.Close()
End Using
Return String.Format("OK|{0}|{1}", strFileName, Date.Now.ToString("yyyy-mm-dd"))
Catch ex As Exception
Return String.Format("FAIL|", ex.Message)
End Try
If MyDB.GetDataItemInt(strSQL) = 0 Then
Return "OK"
Else
Return "NO"
End If
''
End Function