排序函数Excel VB.Net



我使用Microsoft.Office.Interop.Excel库。我所做的是在excel中输入警报。我不知道怎么做的是,通过vb.net,我按天和时间排序警报,这样它就会显示我第一次输入的最后一个警报。我无法使用宏,因为我已经尝试使用模板,但它会给我错误,因为在另一台电脑上,它们使用Open Office。你有什么解决方案吗。非常感谢你所做的一切。一切顺利。

我附上了插入警报的代码。

Public Sub GuardarAlarmas()
Dim fileTest As String = "C:UsersDT SCADADesktopHistoricosAlarmasAño 2021Alarmas 2021_11_noviembre.xlsm"
Dim oExcel As Object
Dim oBook As Workbook
Dim oSheet As Worksheet
oExcel = CreateObject("Excel.Application")
If File.Exists(fileTest) Then
oBook = oExcel.Workbooks.Open(Filename:="C:UsersDT SCADADesktopHistoricosAlarmasAño 2021Alarmas 2021_11_noviembre.xlsm", ReadOnly:=False)
End If
oSheet = oExcel.Worksheets(1)
'Cuento las líneas escritas en cada fila y le pongo un +6 porque empiezo en B6 y si quiero escribir en B7,B8 y viceversa necesito ponerle el +6
Dim paco = oSheet.Range("A6").CurrentRegion.Rows.Count + 6
Console.WriteLine(paco.ToString)
'Aquí recojo el texto de estado, descripción, hora y día
oSheet.Range("A" + paco.ToString).Value = Date.Today
oSheet.Range("B" + paco.ToString).Value = TimeOfDay
oSheet.Range("C" + paco.ToString).Value = "ACTIVA"
oSheet.Range("D" + paco.ToString).Value = "DESCRIPCIÓN"
'Aquí pongo un borde negro en el Excel
Dim Range = oSheet.Range("A" + paco.ToString + ":D" + paco.ToString)
Range.Borders.Color = Color.Black
oSheet.UsedRange.Select()
oSheet.Sort.SortFields.Clear()
oSheet.Sort.SortFields.Add(oSheet.UsedRange.Columns("A"), Excel.XlSortOn.xlSortOnValues, Excel.XlSortOrder.xlDescending, System.Type.Missing, Excel.XlSortDataOption.xlSortNormal)
Dim sort = oSheet.Sort
sort.SetRange(oSheet.Range("A6:D1200"))
sort.Header = Excel.XlYesNoGuess.xlYes
sort.MatchCase = False
sort.Orientation = Microsoft.Office.Interop.Excel.XlSortOrientation.xlSortColumns
sort.SortMethod = Microsoft.Office.Interop.Excel.XlSortMethod.xlPinYin
sort.Apply()
Try
'Aquí uso el DisplayAlerts, para que directamente me confirme que deseo guardar el archivo.
oExcel.DisplayAlerts = False
'Aquí guardo todos los datos introducidos
oBook.SaveAs(Filename:="C:UsersDT SCADADesktopHistoricosAlarmasAño 2021Alarmas 2021_11_noviembre.xlsm", AccessMode:=3, ConflictResolution:=2, Local:=True)
'Aquí pongo el DisplayAlerts a true, por si acaso este queda invalidado en toda la aplicación.
oExcel.DisplayAlerts = True
oBook.Close()
oExcel.Quit()
Catch
'Si hubiese algún error en excel, mataría todos los procesos.
Dim pListOfProcesses() As Process
Dim pExcelProcess As System.Diagnostics.Process
pListOfProcesses = pExcelProcess.GetProcesses
For Each pExcelProcess In pListOfProcesses
If pExcelProcess.ProcessName.ToUpper = "EXCEL" Then
pExcelProcess.Kill()
End If
Next
End Try
End Sub

下载Excel Alarmas

我把解决方案留给你,最终我可以随心所欲地制造电脑。非常感谢大家的帮助。一切顺利。

Public Sub GuardarAlarmas()
'Creo la carpeta donde almacenare las alarmas de origen y la ruta del archivo del origen
Dim MES = DateTime.Now.ToString("MM")
Dim rutaDirectorioOrigen = FormMain.rutaHistoricoAlarmasOrigen + "Año " + DateTime.Now.Year.ToString
My.Computer.FileSystem.CreateDirectory(rutaDirectorioOrigen)
Dim rutaArchivoOrigen As String = rutaDirectorioOrigen + "Alarmas " + DateTime.Now.Year.ToString + "_" + DateTime.Now.Month.ToString + "_" + MonthName(MES.ToUpper) + ".xlsm"
'Creo la carpeta donde almacenaré las alarmas de destino y la ruta del archivo del destino
Dim rutaDirectorioDestino = FormMain.rutaHistoricoAlarmasDestino + "Año " + DateTime.Now.Year.ToString
My.Computer.FileSystem.CreateDirectory(rutaDirectorioDestino)
Dim rutaArchivoDestino As String = rutaDirectorioDestino + "Alarmas " + DateTime.Now.Year.ToString + "_" + DateTime.Now.Month.ToString + "_" + MonthName(MES.ToUpper) + ".xlsm"
'Aqui declaro el objeto Aplicación excel, su libro y su hoja
Dim oExcel As Object
Dim oBook As Excel.Workbook
Dim oSheet As Excel.Worksheet
'Inicializo la aplicacion Excel
oExcel = CreateObject("Excel.Application")
'Si no existe el archivo de origen en excel, cojo la plantilla creada en excel y luego creo el Archivo de Ruta de Origen
If Not File.Exists(rutaArchivoOrigen) Then
oBook = oExcel.Workbooks.Open(Filename:=FormMain.rutaHistoricoAlarmasOrigen + "PlantillaExcel.xlsm", ReadOnly:=False)
oBook.SaveAs(Filename:=rutaArchivoOrigen, AccessMode:=3, ConflictResolution:=2, Local:=True)
oBook.Close()
End If
'Si no existe el archivo de origen abro ese archivo
If File.Exists(rutaArchivoOrigen) Then
oBook = oExcel.Workbooks.Open(Filename:=rutaArchivoOrigen, ReadOnly:=False)
End If
'Elijo la primera hoja del excel
oSheet = oExcel.Worksheets(1)
'Cuento las líneas escritas en cada fila y le pongo un +6 porque empiezo en B6 y si quiero escribir en B7,B8 y viceversa necesito ponerle el +6
Dim paco = oSheet.Range("B6").CurrentRegion.Rows.Count + 1
'Aquí recojo el texto de estado, descripción, hora y día
Me.Label_Texto_Alarma.Text = arrayTexto(Me.Label_Numero_Alarma.Text)
Dim estado = Me.Label_Estado_Alarma.Text
Dim descrip = Me.Label_Texto_Alarma.Text
Dim hora = TimeOfDay
Dim dia = Date.Today.Day.ToString
'Introduzco los datos de la alarma
oSheet.Range("B" + paco.ToString).Value = dia
oSheet.Range("C" + paco.ToString).Value = hora
oSheet.Range("D" + paco.ToString).Value = estado
oSheet.Range("E" + paco.ToString).Value = descrip
'Si el estado es ACTIVA, el color será rojo. Si es inactiva será Verde y si es acusada será NARANJA
If (estado.Equals("ACTIVA")) Then
oSheet.Range("B" + paco.ToString + ":E" + paco.ToString).Font.Color = Color.Red
End If
If (estado.Equals("INACTIVA")) Then
oSheet.Range("B" + paco.ToString + ":E" + paco.ToString).Font.Color = Color.Green
End If
If (estado.Equals("ACUSADA")) Then
oSheet.Range("B" + paco.ToString + ":E" + paco.ToString).Font.Color = Color.Orange
End If
'Aquí pongo un borde negro en el Excel
Dim rangos = oSheet.Range("B" + paco.ToString + ":E" + paco.ToString)
rangos.Borders.Color = Color.Black
oSheet.Sort.SortFields.Clear()
oSheet.UsedRange.Select()
oSheet.Sort.SortFields.Add(oSheet.Range("B6:B1200"), Excel.XlSortOn.xlSortOnValues, Excel.XlSortOrder.xlDescending, System.Type.Missing, Excel.XlSortDataOption.xlSortNormal)
oSheet.Sort.SortFields.Add(oSheet.Range("C6:C1200"), Excel.XlSortOn.xlSortOnValues, Excel.XlSortOrder.xlDescending, System.Type.Missing, Excel.XlSortDataOption.xlSortNormal)
Dim sort = oSheet.Sort
sort.SetRange(oSheet.Range("B6:E1200"))
sort.Header = Excel.XlYesNoGuess.xlYes
sort.MatchCase = False
sort.Orientation = Microsoft.Office.Interop.Excel.XlSortOrientation.xlSortColumns
sort.SortMethod = Microsoft.Office.Interop.Excel.XlSortMethod.xlPinYin
sort.Apply()
Try
'Aquí uso el DisplayAlerts, para que directamente me confirme que deseo guardar el archivo.
oExcel.DisplayAlerts = False
'Aquí guardo todos los datos introducidos
oBook.SaveAs(Filename:=rutaArchivoOrigen, AccessMode:=3, ConflictResolution:=2, Local:=True)
oBook.SaveAs(Filename:=rutaArchivoDestino, AccessMode:=3, ConflictResolution:=2, Local:=True)
'Aquí pongo el DisplayAlerts a true, por si acaso este queda invalidado en toda la aplicación.
oExcel.DisplayAlerts = True
oBook.Close()
oExcel.Quit()
Catch
'Si hubiese algún error en excel, mataría todos los procesos.
Dim pListOfProcesses() As Process
Dim pExcelProcess As System.Diagnostics.Process
pListOfProcesses = pExcelProcess.GetProcesses
For Each pExcelProcess In pListOfProcesses
If pExcelProcess.ProcessName.ToUpper = "EXCEL" Then
pExcelProcess.Kill()
End If
Next
End Try
End Sub
Public WithEvents Label_Hora_Alarma As System.Windows.Forms.Label
End Class

最新更新