嘿,我是从C#WinForms应用程序自动化PowerPoint和Excel; 我所做的是从PowerPoint中读取幻灯片并将其保存在Excel中,然后退出这两个应用程序.Excel已成功退出,但PowerPoints未退出.问题是,当我第一次转换它不退出时,但当我再次转换时它确实.
这是我的代码
try
{
PowerPoint.Application ppApp;
PowerPoint.Presentation ppPres;
List<Company> companies = new List<Company>();
ppApp = new PowerPoint.Application();
ppApp.Visible = Microsoft.Office.Core.MsoTriState.msoTrue;
ppApp.WindowState = Microsoft.Office.Interop.PowerPoint.PpWindowState.ppWindowMinimized;
ppPres = ppApp.Presentations.Open(fileTxtBox.Text,
Microsoft.Office.Core.MsoTriState.msoFalse,
Microsoft.Office.Core.MsoTriState.msoFalse,
Microsoft.Office.Core.MsoTriState.msoTrue);
int slides = ppPres.Slides.Count;
for (int slide = 1; slide <= slides; slide++)
{
int rows = 1;
PowerPoint.Cell cell;
int shape = 1;
for (; shape < ppPres.Slides[slide].Shapes.Count; shape++)
{
if (ppPres.Slides[slide].Shapes[shape].HasTable == Microsoft.Office.Core.MsoTriState.msoTrue)
{
cell = ppPres.Slides[slide].Shapes[shape].Table.Cell(1, 1);
if (cell.Shape.TextFrame.TextRange.Text.Trim().ToLower().Contains("realized"))
{
rows = ppPres.Slides[slide].Shapes[shape].Table.Rows.Count;
break;
}
}
} …Run Code Online (Sandbox Code Playgroud) 调用Socket.BeginReceive/EndReceive函数的顺序是什么?
例如,我调用BeginReceive两次,一次获取消息长度,第二次调用消息本身.现在的情况是这样的,对于我发送的每条消息,我开始等待它的完成(实际上确认发送的消息,我等待接收到确认后的动作完成),所以我用每个BeginSend调用BeginReceive,但是每个BeginReceive的回调,我检查我是否收到长度或消息.如果我收到消息并完全收到消息,那么我会调用另一个BeginReceive来接收完成的操作.现在这是事情不同步的地方.因为我的一个接收回调是接收字节,它将其解释为消息的长度,实际上它是消息本身.
现在我该如何解决?
编辑:这是一个C#.NET问题:)
这是代码,基本上它太大了,对不起
public void Send(string message)
{
try
{
bytesSent = 0;
writeDataBuffer = System.Text.Encoding.ASCII.GetBytes(message);
writeDataBuffer = WrapMessage(writeDataBuffer);
messageSendSize = writeDataBuffer.Length;
clientSocket.BeginSend(writeDataBuffer, bytesSent, messageSendSize, SocketFlags.None,
new AsyncCallback(SendComplete), clientSocket);
}
catch (SocketException socketException)
{
MessageBox.Show(socketException.Message);
}
}
public void WaitForData()
{
try
{
if (!messageLengthReceived)
{
clientSocket.BeginReceive(receiveDataBuffer, bytesReceived, MESSAGE_LENGTH_SIZE - bytesReceived,
SocketFlags.None, new AsyncCallback(RecieveComplete), clientSocket);
}
}
public void Send(string message)
{
try
{
bytesSent = 0; …Run Code Online (Sandbox Code Playgroud) 我有一个Form和一个DataGridView.我在运行时填充DataGridView,所以我想知道如何根据DataGridView的大小动态调整Form的大小?有什么样的财产或方法吗?或者我是否必须自己确定尺寸并相应更新?
为什么我收到以下代码的以下警告:)
码:
_stprintf(m_szFileNamePath,_T("%s"),strFileName);
Run Code Online (Sandbox Code Playgroud)
警告C4996:'_ swprintf':swprintf已更改为符合ISO C标准,添加了额外的字符计数参数.要使用传统的Microsoft swprintf,请设置_CRT_NON_CONFORMING_SWPRINTFS.
我知道_strprintf是一个宏,如果定义_UNICODE将评估为_swprintf,否则它将是sprintf.
现在这是什么_swprintf.有一个函数swprintf,但为什么_stprintf评估为_swprintf而不是swprintf.
b/w _xxx和xxx有什么区别?
编辑:
好的,_stprintf的UNICODE版本有两个定义,其中一个包含在内?
tchar.h或strsafe.h中的那个?
如何使用C#从CSV文件导入Excel中的数据?实际上,我想要实现的与我们在Excel中的操作类似,您可以转到" 数据"选项卡,然后选择" 从文本"选项,然后使用" 文本到列"选项并选择"CSV",它可以实现神奇的功能.我想自动化它.
如果你能让我朝着正确的方向前进,我会非常感激.
编辑:我想我没有解释清楚.我想做的就像是
Excel.Application excelApp;
Excel.Workbook excelWorkbook;
// open excel
excelApp = new Excel.Application();
// something like
excelWorkbook.ImportFromTextFile(); // is what I need
Run Code Online (Sandbox Code Playgroud)
我想将这些数据导入Excel,而不是我自己的应用程序.据我所知,我不认为我必须自己解析CSV然后将它们插入Excel中.Excel为我们做到了这一点.我只需要知道如何自动化该过程.
我正在阅读如何在Win32中实现SEH,我遇到了这个称为FS寄存器的东西.我在谷歌上找不到任何好东西(最有可能的是我可能在寻找错误的东西).所以有人可以解释它是什么吗?
好的,所以提前一段时间我发布了如何阅读其他程序的其他配置文件(这里是链接上一篇文章.我设法做到了.但是现在还有另外一个问题.场景是这样的,我有两个程序.程序A从配置文件读取其配置,程序B仅用于修改A读取的配置文件的内容.配置文件的名称是email.config.它位于程序A和B所在的目录中.
问题是我使用打开文件对话框获取附件文件的路径.如果路径指向同一目录中的文件,则程序运行完美!但如果它指向目录外的文件,则会抛出System.NullReferenceException类型的异常.
这是代码
private void saveBtn_Click(object sender, EventArgs e)
{
try
{
// save everything and close
string attachment = attachTxtBox.Text;
var configMap = new ExeConfigurationFileMap { ExeConfigFilename = configFileName };
// it throws exception here when
// the path points to a file outside the exes directory
Configuration externalConfig = ConfigurationManager.OpenMappedExeConfiguration(configMap, ConfigurationUserLevel.None);
externalConfig.AppSettings.Settings["ServerAddress"].Value = serverAddr;
externalConfig.AppSettings.Settings["Port"].Value = port;
externalConfig.AppSettings.Settings["SSL"].Value = ssl.ToString();
externalConfig.AppSettings.Settings["Sender"].Value = …Run Code Online (Sandbox Code Playgroud) 嘿,在C++中,我有一个类型的向量:
vector<BaseClass*> myVector;
Run Code Online (Sandbox Code Playgroud)
其中,我将派生类的(push_back)指针插入其中.
现在,我想回弹它的元素,所以我这样做:
vector<ADlgcDev*>::iterator iter;
for (iter = myVector.rbegin(); iter != myVector.rend(); iter++)
{
// but before I pop it, I need to shutdown it down
// so I cast this
// but this way, I'm unable to call the function
(DerivedClass*(*iter))->Shutdown();
myVector.pop_back();
}
Run Code Online (Sandbox Code Playgroud)
但正如我在弹出之前的评论中所提到的,我需要调用它的Shutdown()方法并且演员也不能正常工作.任何决议?还是不可能?
我需要知道C++中的#define指令是否声明了全局标签?全球我的意思是在每个文件中都可见?
我正在使用Visual Studio 2008,(猜测是否重要)
如果两者都转换为机器代码,汇编如何比编译语言更快?
我说的是真正编译的语言,它们被翻译成机器代码.不是C#或Java,它们首先被编译为中间语言,然后由软件解释器等编译为本机代码.
在维基百科上,我找到了一些我不确定它是否与此相关的东西.是因为从更高级别的语言翻译会产生额外的机器代码吗?或者我的理解错了吗?
称为汇编程序的实用程序用于将汇编语言语句转换为目标计算机的机器代码.汇编程序从助记语句到机器指令和数据执行或多或少的同构转换(一对一映射).这与高级语言形成对比,在高级语言中,单个语句通常会产生许多机器指令.
c# ×5
c++ ×3
.net ×2
assembly ×1
beginreceive ×1
casting ×1
com ×1
config ×1
csv ×1
datagridview ×1
excel ×1
file ×1
filesystems ×1
forms ×1
import ×1
performance ×1
pointers ×1
powerpoint ×1
printf ×1
resize ×1
seh ×1
sockets ×1
vector ×1
visual-c++ ×1
vsto ×1
winapi ×1