2017-03-08 48 views
0

这可能听起来很愚蠢,但有人可以解释为什么我需要在vb.net中包含这个额外的代码,当我改变单元格的颜色时,我不需要在VBA中。 我写了一个程序,使用microsoft.office.interop引用创建并保存一个excel文件。这里是我的代码:为什么代码改变vb.net中的单元格颜色与vba不同?

Public Class Export_Excel_Class 
Public excelapp As Microsoft.Office.Interop.Excel.Application 
Public excelbook As Microsoft.Office.Interop.Excel.Workbook 
Public excelsheet As Microsoft.Office.Interop.Excel.Worksheet 

Public Sub newExcel() 

    excelapp = New Microsoft.Office.Interop.Excel.Application 
    excelbook = excelapp.Workbooks.Add() 
    excelsheet = excelbook.Sheets("sheet1") 
    excelsheet.Range("A1").Select() 
    excelsheet.Range("a1").AddComment("hello") 
    excelsheet.Range("a1:B10").Interior.Color = System.Drawing.ColorTranslator.ToOle(System.Drawing.Color.Yellow) 
    excelbook.SaveAs("C:\Users\DatOneBull\Desktop\Excel_Test") 
    excelapp.Quit() 

End Sub 

在那台本来我曾试图excelsheet.Range("a1:B10").Interior.Color = 并试图设置颜色,但颜色proptery是只读的颜色就行了。我在网上找到了解决方案,但没有解释。有人能告诉我这段代码意味着什么,它为什么能够设置th范围的颜色值?

System.Drawing.ColorTranslator.ToOle(System.Drawing.Color.Yellow) 
+0

很显然'Color'属性不是只读的,因为您将它设置在您发布的代码中。原来的问题大概是你试图给一个不属于这个类型的属性赋一个'System.Drawing.Color'值。这个“额外的代码”正在创建一个适当类型的值,即'Integer',它表示所需的'System.Drawing.Color'。 – jmcilhinney

回答

0

VB.NET存储与VBA不同的颜色。 ToOle函数将VB.NET颜色转换为等效的VBA版本。这是marshalling的一个例子。

(如果你有兴趣,在“OLE”中的“图勒”代表“对象链接和嵌入”,这是Windows程序相互沟通的旧方式)

0

在VBA中,您将设置颜色是这样的:

Range("A1").Interior.Color = Excel.XlRgbColor.rgbYellow 
' Or 
Range("A2").Interior.Color = VBA.RGB(255, 255, 0) 

注意,我特意完全合格的VBA代码。这是有效的VBA代码,但以您很少看到的风格。

在VB.Net,你可以不喜欢它:

ws.Range("A1").Interior.Color = Excel.XlRgbColor.rgbYellow 
ws.Range("A2").Interior.Color = Microsoft.VisualBasic.Information.RGB(255, 255, 0) 

本质上是相同的代码。或者你可以像你目前正在做的那样做。

净效果是一样的;一个表示颜色的整数值正被分配给Interior.Color属性。要么使用函数来计算该值,要么使用常量。各种.Net功能等同于VBA.RGB功能。 VBA对定义为System.Drawing.Color的颜色一无所知,因此转换函数是必需的。