我已经开始使用Microsoft提供的Excel互操作程序集来处理我的一个C#应用程序.一切都很顺利,但似乎缺乏强大的打字,老实说,感觉就像我在写VBA代码.有没有其他方法可以与C#进行Excel交互,从而提供更好的OO体验?我顺便使用VS2010和.Net 4.0.
我想知道如何更新现有的数据透视表数据源.我正在使用Microsoft.Office.Interop.ExcelExcel 2010 来定位用户.
我目前能够刷新数据透视表,它工作正常,但是当添加更多行时,我想在数据透视表数据源中包含这些行.例如,在Excel中查看时的数据透视表数据源是,DataSourceWorksheet!$A$2:$U$26并且我希望DataSourceWorksheet!$A$2:$U$86在更新/刷新Excel文件代码运行后将其更改为(60多行).
这是我的代码的简化版本
Application excelApplication = new Application();
Workbooks workbooks = excelApplication.Workbooks;
wrkBook = workbooks.Open(EXCEL_DOCUMENT_PATH, Missing.Value, false, Missing.Value,
Missing.Value, Missing.Value, Missing.Value, Missing.Value,
Missing.Value, true, Missing.Value, Missing.Value,
Missing.Value, Missing.Value, Missing.Value);
/* update data source worksheet code here (omitted for example) */
Worksheet pivotWorkSheet = (Worksheet)wrkBook.Sheets[PIVOT_SHEET_NAME];
PivotTable pivot = (PivotTable)pivotWorkSheet.PivotTables(pivotTableName);
/* I would like to update the pivot tables data source here...
I could use Range object from data source worksheet...
Basically just want …Run Code Online (Sandbox Code Playgroud) 我正在开发一个vb.net控制台应用程序,它可以逐个打开多个电子表格,读取几个单元格并关闭文件.
当我打开文件时,某些电子表格具有Excel重新计算的公式,并且我收到一个对话框,询问我是否要在关闭电子表格时保存对电子表格的更改.
消息:"是否要将更改保存到myfile.xls?Microsoft Office Excel在打开上次由早期版本的Excel保存的文件时重新计算公式"
如何自动拒绝该对话框?
Dim newCBD As New CBD
Dim xlApp As Excel.Application
Dim xlWorkBook As Excel.Workbook
Dim xlWorkSheet As Excel.Worksheet
xlApp = New Excel.ApplicationClass
xlWorkBook = xlApp.Workbooks.Open(myFile)
xlWorkSheet = xlWorkBook.Worksheets(1)
...do a bunch of junk here
xlWorkBook.Close()
xlApp.Quit()
Run Code Online (Sandbox Code Playgroud)
谢谢!
当前设置:
因此,我可以使用以下代码将文件另存为XLS:
_myWorkbook.SaveAs("FileName.xls", Excel.XlFileFormat.xlWorkbookNormal)
Run Code Online (Sandbox Code Playgroud)
我还可以使用以下代码将文件另存为XLSX(因为我使用的是Office 2010):
_myWorkbook.SaveAs("FileName.xlsx", Excel.XlFileFormat.xlWorkbookDefault)
Run Code Online (Sandbox Code Playgroud)
问题:
我已尝试(未成功)使用以下代码将文件另存为XLSX:
_myWorkbook.SaveAs("FileName.xlsx", Excel.XlFileFormat.xlExcel12)
Run Code Online (Sandbox Code Playgroud)
为什么这不起作用?最后我查了一下,Excel 12是Excel 2007(支持XLSX的版本).我错过了什么吗?
(对于那些感兴趣的人,我收到This extension can not be used with the selected file type错误)
我一直在研究用c#绘制图表的方法.我有一个特定的要求,绘制一个图表,其中包含y轴和x轴以及第二个y轴.我已经尝试过使用excel Interop但是没有找到解决方案.我已经开始使用MSChart组件但是没有达到任何数据我的数据与...合作
index lines branches
1 20 5
2 30 8
3 34 6
Run Code Online (Sandbox Code Playgroud)
我想在x轴上绘制索引,在左y轴上绘制线的比例,在右y轴上绘制分支的比例.
我正在使用.net版本2.0和3.5,如果这有帮助
如果我尝试读取空的EXCEL单元格,则会收到System.com_object错误.我的代码是:
public static List<OrderPC> getFilters(string fileCheckout)
{
List<OrderPC> orderPCs = new List<OrderPC>();
XLDoc sldoc = new XLDoc();
string localPath = @"C:\Temp\PCs.xlsx";
Microsoft.Office.Interop.Excel.Application oXL=null;
Microsoft.Office.Interop.Excel.Workbook mWorkBook=null;
Microsoft.Office.Interop.Excel.Worksheet mWSheet1=null;
Microsoft.Office.Interop.Excel.Range xlRange=null;
try
{
oXL = new Microsoft.Office.Interop.Excel.Application();
mWorkBook = oXL.Workbooks.Open(localPath);
mWSheet1 = mWorkBook.Sheets[1];
xlRange = mWSheet1.UsedRange;
foreach (Microsoft.Office.Interop.Excel.Hyperlink hl in xlRange.Hyperlinks)
{
int y = hl.Range.Column;
int z = hl.Range.Row;
string vFilter = mWSheet1.Cells[z, y + 1].Value2.Trim();
if (vFilter.CompareTo("Weekly") == 0)
{
String baseUri = "http://xxx.yyy.net?";
int followUpIndex = baseUri.Length;
OrderPC orderPc …Run Code Online (Sandbox Code Playgroud) 我想使用Microsoft.Office.Interop.Excel库将边框应用于一个单元格.
我正在运行一个while循环,它在某个列中搜索一个空单元格,一旦找到单元格,我想对它应用边框.
我知道有很多关于这个使用Ranges的论坛,但我不能使用范围功能,因为我不知道它正在应用于哪个单元格.
我的想法是:
(Excel.Range)xlWS.Cells [row,1] .Borders.LineStyle =(Whatever Value);
有什么建议?(除了链接到其他论坛,我已经看过很多表格)?
我已成功实现了Microsoft示例"演练:使用功能区按钮同步自定义任务窗格",如下所示:http: //msdn.microsoft.com/en-us/library/bb608590.aspx
最初我遇到了一个问题,任务窗格没有显示,结果是我的加载项和微软的"分析工具包"之间发生了一些冲突.禁用Analysis Toolpack后,自定义任务窗格开始按预期显示和隐藏.
然后,当用户按下按钮时,我编写了一些代码来更改所选范围内的单元格.这似乎工作得很好 - 直到我打开另一本工作簿!每个工作簿窗口都有自己的加载项功能区,但是当我单击切换按钮打开/关闭自定义任务窗格时,它只会打开/关闭创建的第一个窗口的自定义任务窗格.这与我单击切换按钮的窗口无关.
该代码在ThisAddIn_Startup中实例化CustomTaskPane对象(就像在示例代码中一样).我唯一添加的是UserControl中的按钮操作:
using xl = Microsoft.Office.Interop.Excel;
namespace SynchronizeTaskPaneAndRibbon
{
public partial class TaskPaneControl : UserControl
{
public TaskPaneControl()
{
InitializeComponent();
}
private void actionButton1_Click(object sender, EventArgs e)
{
xl.Range selection_rng = Globals.ThisAddIn.Application.Selection;
foreach (xl.Range cell in selection_rng.Cells)
{
if (cell.Value is string)
{
string v = cell.Value;
cell.Value = v + "*";
}
}
}
}
}
Run Code Online (Sandbox Code Playgroud)
代码的其余部分就像在示例中一样.
有没有办法更改示例,以便它可以用于打开多个工作簿?我想要的是相同的加载项出现在每个工作簿窗口中,具有相同的功能区和相同的自定义窗格.当然,要将任何功能区操作(例如按下按钮)路由到出现在同一窗口中的自定义任务窗格.
我正在使用F#和Excel Interop将数据输出到Excel电子表格.我的第一个方法是单独设置每个单元格:
worksheet.Range(range1).Value2 <- "=sum(a1:a10)"
worksheet.Range(range2).Value2 <- "=min(a1:a10)"
worksheet.Range(range3).Value2 <- "=max(a1:a10)"
(* etc *)
Run Code Online (Sandbox Code Playgroud)
但是,当有大量公式时,这太慢了,所以我切换到了一个数组:
worksheet.Range(range).Value2 <- [| "=sum(a1:a10)"
"=min(a1:a10)"
"=max(a1:a10)" |]
Run Code Online (Sandbox Code Playgroud)
要么
worksheet.Range(range).Formula <- [| "=sum(a1:a10)"
"=min(a1:a10)"
"=max(a1:a10)" |]
Run Code Online (Sandbox Code Playgroud)
但是,现在Excel只在单元格中显示这些字符串,而不是计算公式的值.我也尝试过:
worksheet.Range(range).FormulaArray <- [| "=sum(a1:a10)"
"=min(a1:a10)"
"=max(a1:a10)" |]
Run Code Online (Sandbox Code Playgroud)
但这与每个公式的目标范围相混淆.我不确定那里发生了什么.(而不是将其保留为"a1:a10",Excel根据公式的位置转换目标范围.)
有一个更好的方法吗?
更新:我也尝试使用"= MIN($ G $ 2:$ G $ 5)",但这产生了相同的效果,其中Excel只显示字符串而不评估公式.
对于它的价值,如果我进入单元格,擦除然后重新添加公式中的任何字符,当我点击"输入"时,Excel将对其进行评估.
更新2:我也尝试了以下内容:
worksheet.Range(range).FormulaR1C1 <- [| "=sum(R2C[0]:R4C[0])"
"=average(R2C[0]:R4C[0])"
"=min(R2C[0]:R4C[0])"
"=max(R2C[0]:R4C[0])" |]
Run Code Online (Sandbox Code Playgroud)
但我遇到了同样的问题:Excel将它们呈现为字符串而不是评估公式.
我想在行/整张表中检测合并的单元格(最好).这是我的代码
Microsoft.Office.Interop.Excel.Application xl = new Microsoft.Office.Interop.Excel.Application();
Microsoft.Office.Interop.Excel.Workbook workbook = xl.Workbooks.Open(source);
//Microsoft.Office.Interop.Excel.Worksheet ws = (Microsoft.Office.Interop.Excel.Worksheet)workbook.Sheets[sheetNumber];
Microsoft.Office.Interop.Excel.Worksheet ws = (Microsoft.Office.Interop.Excel.Worksheet)workbook.Worksheets[objInMemory._sheetName];
xl.ScreenUpdating = false;
ws.Columns.ClearFormats();
ws.Rows.ClearFormats();
int colCount = ws.UsedRange.Columns.Count;
int rowCount = ws.UsedRange.Rows.Count;
int strtRow = ws.UsedRange.Rows[1].Row;
int strtCol = ws.UsedRange.Columns[1].Column;
Microsoft.Office.Interop.Excel.Range objRange = null;
Run Code Online (Sandbox Code Playgroud)
这段代码都没有
if (ws.Cells.MergeCells)
{
}
Run Code Online (Sandbox Code Playgroud)
也不是这段代码(仅适用于row1)
for (int j = strtCol; j < strtCol + colCount; j++)
{
objRange = ws.Cells[strtRow, j];
if (ws.Cells[strtRow, j].MergeCells)
{
message = "The Sheet Contains Merged Cells";
break;
}
}
Run Code Online (Sandbox Code Playgroud)
似乎工作..请告诉我如何检查工作表/特定范围是否包含合并的单元格.
excel-interop ×10
c# ×7
excel ×4
vb.net ×2
.net ×1
automation ×1
border ×1
c#-4.0 ×1
cell ×1
excel-2010 ×1
f# ×1
interop ×1
mschart ×1
ribbon ×1